11

如果我有

Class *a1 = new Class();
Class *b1 = a1;

delete b1;
delete a1; //this will give a double free or corruption message;

如果我删除指针b,它与删除指针a一样吗?由于两者都指向同一个 Class 实例。那么,如何将 a1 的实例复制到 b1,以便在删除 b1 时,不会删除 a1。

Class *a1 = new Class();
Class *b1 = a1;

//how do I duplicate the instance a1 is pointing
//so that when I delete b1, a1 still exists.

delete b1; 
delete a1; //this is still valid 

谢谢。

4

1 回答 1

14

您使用指针和分配是否有原因?否则它很简单

Class a1;
...
Class b1 = a1;

这里不需要删除。

如果你需要保持结构原样,你需要做

Class *a1 = new Class();
Class *b1 = new Class(*a1);

或者

Class *a1 = new Class();
Class *b1 = new Class();
*b1 = *a1;

这假设您有一个有效的复制构造函数(例如#1)或赋值运算符(例如#2)

ps:尝试使用std::unique_ptr而不是原始指针更安全。

于 2012-12-27T06:16:12.367 回答