简体   繁体   中英

Why not implement deep copy in default copy constructor?

All people keep remind us of the case when using default copy constructor and default assign operator, be careful since they're shadow copy. However, I am always confused why not make deep copy by default among default copy constructor and default assign operator in c++, so that no one need to write their own copy constructor implementation in order to prevent any accident?

C++ implement copy by value, which means it basically does x = y; . In many cases this is enough.

However, in the case of pointers the compiler knows nothing about what is pointed to. It will copy the value of the pointer, but will not duplicate the underlying item because of this. For example, if you've got a class like this:

class Foo
{
  char *data;
};

Then what should the compiler do with data ? It doesn't know if it points to a single char or an array of char . It doesn't know anything about how the memory was allocated or how it should be freed. It doesn't know if it should make a copy, or if all instances of Foo should point to the same instance.

Because of this the language takes a perfectly reasonable default stance, which is that only the value of the pointer will be copied. If you want anything more then you have to do it yourself as only you fully understand the use-case of the variable.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM