Rule of Zero — if a class manages no resources, declare no special member functions.
1// Rule of Zero — let compiler handle everything2class Person {3 std::string name;4 int age;5public:6 Person(std::string n, int a) : name(std::move(n)), age(a) {}7 // No destructor, copy/move ops — compiler generates correct ones8};910// Rule of Five — managing raw resource11class Buffer {12 char* data;13 size_t size;14public:15 Buffer(size_t s) : data(new char[s]), size(s) {}16 ~Buffer() { delete[] data; }17 Buffer(const Buffer&);18 Buffer& operator=(const Buffer&);19 Buffer(Buffer&&) noexcept;20 Buffer& operator=(Buffer&&) noexcept;21};2223// Best: use RAII wrappers to get Rule of Zero24class BetterBuffer {25 std::vector<char> data; // No manual management26public:27 BetterBuffer(size_t s) : data(s) {}28 // Compiler-generated ops are correct!29};
Rule of thumb: