Rule of Five

C++
Author

Quasar

Published

December 27, 2024

Introduction

The rule-of-five states that, if a class C has one of user-declared

  • Destructor ~C
  • Copy constructor C(const C&)
  • Copy assignment operator C& operator=(const C&)
  • Move constructor C(C&&)
  • Move assignment operator C& operator=(C&&)

it should declare all five special member functions.

User-declared != User-provided. Any explicitly defaulted (=default) or deleted (=delete) functions count as user-declared.

A function is user-provided if it is user-declared and not explicitly defaulted or deleted.

Hinnant Table

The infamous Hinnant table elaborates the various special members implicitly generated by the compiler in the presence of user-declared special functions.

Hinnant table