当使用默认复制构造函数和默认赋值运算符时,所有人都会一直提醒我们,因为它们是卷影副本所以要小心.但是,我总是很困惑,为什么不在默认的拷贝构造函数和c ++中的默认赋值运算符中进行深层复制,这样就不需要编写自己的拷贝构造函数实现来防止任何意外?
Sea*_*ean 10
C++实现了按值复制,这意味着它基本上可以x = y;.在许多情况下,这就足够了.
但是,在指针的情况下,编译器对所指向的内容一无所知.它将复制指针的值,但不会因此而复制基础项.例如,如果你有一个这样的类:
class Foo
{
char *data;
};
Run Code Online (Sandbox Code Playgroud)
然后编译器应该怎么做data?它不知道它是指向单个char还是数组char.它不知道如何分配内存或如何释放内存.它不知道它是否应该复制,或者是否所有实例Foo都指向同一个实例.
因此,语言采用完全合理的默认姿态,即只复制指针的值.如果你想要更多的东西,你必须自己做,因为只有你完全理解变量的用例.
| 归档时间: |
|
| 查看次数: |
736 次 |
| 最近记录: |