Who's teaching you?
Basically, this is all low-level power of C++. Pointers and stuff. Other languages won't have that. If you have objects that have pointers as its member variables e.g.
class someObject { int* aPointer; }
someObject A, B;
A = B;
By default, C++ simply equals them both, so it'd be int* = int*
Now, int* is different from int. int is a number, int* is an address. So if the B.aPointer was say 0xPOTATO, it will just assign 0xPOTATO to A.aPointer. It doesn't really care what the type was. It will just straight on assign whatever it has. 0xPOTATO maybe 1,2,3,4,.. etc but it doesn't really care. All that matters is that you change the pointer to point to 0xPOTATO.
This is called shallow copy.
If you were to write your own constructor, which would go 0xPOTATO and take the value inside and THEN assign it to A.aPointer. This is deep copy. You're dealing with numbers here, not addresses.