Rule of Three in C++

If you know that the copy constructor won’t be used, you can express that by making it private and unimplemented, thus:

class C
{
private:
    C(const C&); // not implemented
};

(in C++11 you can use the new = delete syntax). That said, you should only do that if you’re absolutely sure it will never be needed. Otherwise, you might be better off implementing it. It’s important not to just leave it as is, as in that case the compiler will provide a default memberwise copy constructor that will do the wrong thing – it’s a problem waiting to happen.

To some extent it depends on what the class is going to be used for – if you’re writing a class that’s part of a library, for instance, it makes much more sense to implement the copy constructor for consistency reasons. You have no idea a priori how your class is going to be used.

Leave a Comment