13.1.1 合成的复制构造函数 memberwise initialize问题 C++ Primer

来源:互联网 发布:变色龙制作淘宝客app 编辑:程序博客网 时间:2024/04/30 10:20

http://social.msdn.microsoft.com/Forums/zh/vcgeneral/thread/791dc8a1-ada1-4490-85fe-6912d4fe3734


Hi All,

I got a problem here. Somebody help me please.

To my understanding, there are two facts:

1. shallow copy = bitwise copy    and     deep copy = memberwise copy

2. The compiler will give us a default copy constructor if needed when we do not provide it. And this constructor is memberwise copy.

So i'm confused now:

If the default copy constructor is memberwise copy(which means deep copy), why should we define our own copy constructor? Because the default one is enough. But as we encounter the following scenario, we do need to provide our own copy constructor:

 

Class Test{int a;char *b;};


So could the <<C++ Primer>> wrong? Because it says the default copy constructor of C++ will do memberwise copy, but in fact, it does bitwise copy.

Or i missed something?

Please help me buddies.

 

Thanks.

Well, I think is a hybrid as I understand this topic:  The compiler-provider copy constructor will perform  a shallow copy on data types that don't provide a copy constructor themselves.  Example:  The compiler should provide a shallow copy of the pointer inside the following class, but it should provide a memberwise copy of the STL string:


class Test{    char *myShallowString;  //The pointer will be cloned (shallow copy)    std::string myMemberString; //The std::string's copy constructor will be used (memberwise copy)};

So if you really analyze it, C++ truly does memberwise by default:  It will call the copy constructor of a char pointer, which is one compiler-provided.

Correct.  If all members of the class already provide an appropriate copy constructor, the class will behave properly, meaning in my head that C++ truly provides memberwise copy construction by default.

原创粉丝点击