Every class in C++ has an implicit copy constructor that does a shallow copy of the object. Shallow means it copies the value of the members. So if there's a pointer the pointer value is copied so both object point to the same.
Most of the time this is not wanted, so you have to define your own copy constructor.
Often you don't even want to create copies of your object, so it's good style to declare a copy constructor, but not define it. (Empty declaration in header file).
Then, if you accidentially create a copy (e.g. returning an object, forgot the & when declaring a parameter-by-reference method etc.), you'll get a linker error.
If you declare the copy constructor private, you'll also get a compiler error (if used outside the class).
To summarize it: It's always good style to declare the copy constructor explicitly - especially if you don't need on at all: Just write
private:
MyClass(const MyClass&);
in your class definition to disable the copy constructor of your class.