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
创建的数组出现在t1
,t2
,t3
**
请你解释一下这与其他一些例子有什么关系。
答案 0 :(得分:0)
如果复制构造函数和运算符=仅复制指针的值,则在结尾t1,t2和t3将指向相同的内存位。如果table有一个删除指针的析构函数,那么同一个指针将被删除三次 - 每个对象一次。这应该导致段错误。
为了防止这种情况,一个类可以为每个副本分配一个新数组(称为制作deep copy),或者reference counting。