When you have a class with a pointer as a data member, presumably objects you instantiate of that class will have dynamic memory (new operator). All classes whose objects will have dynamic memory MUST have: 1. copy constructor 2. overloaded assignment operator 3. destructor If you don't want to allow copying of your object, you can make the copy and operator= private. If you do not write a copy and operator=, the default for these (which does a memberwise copy) will be used. This makes a shallow copy. This means two objects share memory, generally not what you want. You want to make a deep copy so all objects own their own memory.