请参阅 TC++PL 第 3 版第 10.4.4.1 "copying object" 节

refer to section 10.4.4.1 "copying object" of TC++PL 3rd edition

本文关键字:object copying TC++PL 版第 请参阅      更新时间:2023-10-16

class table{ name *p; int i;
public:
table(int j=15){p=new name[i=j]} //constructor
~table(){delete[]p;} }

 void h()     
{
    table t1;  
    table t2=t1; 
    table t3;  
    t3=t2;
}`

Bjarne为t1创建的数组将被删除3次,因为为t1创建的数组出现在t1t2t3**中

你能用其他例子解释一下这是什么意思吗。

如果复制构造函数和运算符=只复制指针的值,那么最终t1、t2和t3将具有指向相同内存位的指针。若表有一个删除指针的析构函数,那么同一指针将被删除三次——每个对象一次。这应该会导致segfault。

为了防止这种情况,类可以为每个副本分配一个新数组(称为生成深度副本),或者进行引用计数。

相关文章: