指针 - 重复的对象实例

tam*_*olo 8 c++ pointers

如果我有

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

delete b1;
delete a1; //this will give a double free or corruption message;
Run Code Online (Sandbox Code Playgroud)

如果我删除指针b,它与删除指针一样正确吗?由于两者都指向同一个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 
Run Code Online (Sandbox Code Playgroud)

谢谢.

Kar*_*k T 11

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

Class a1;
...
Class b1 = a1;
Run Code Online (Sandbox Code Playgroud)

这里没有必要删除.

如果您需要保持结构,您需要这样做

Class *a1 = new Class();
Class *b1 = new Class(*a1);
Run Code Online (Sandbox Code Playgroud)

要么

Class *a1 = new Class();
Class *b1 = new Class();
*b1 = *a1;
Run Code Online (Sandbox Code Playgroud)

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

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

  • 如果其他人写了Class并且他们没有添加copy-constructor或赋值运算符怎么办? (3认同)