我有一个对象 O1,它有指针。我通过复制构造函数创建了另一个对象 O2。指针地址将被复制到对象 O2 中。当我离开 O2 的范围时,它将被删除。析构函数也将删除指针。这使得对象 O1 中的指针变得悬空。如何确保只有在我从 O1 出来时才删除指针。
简而言之,如何仅在没有其他人直接或间接引用该指针时删除该对象指针。
class info {
public:
char *buf;
int len;
info(int l) {
len = l;
buf = new char[len];
buf[0] = 'h';
}
~info() {
delete[] buf;
}
};
int main() {
info O1(100);
cout << O1.buf << "\n";
{
info O2(O1);
}
cout << O1.buf << "\n";
}
这里 main 末尾的 O1 的析构函数将获得一个 SIGABT 信号,用于尝试释放 O1.buf 引用的内存,该内存已通过 O2 删除。
最佳答案
Shared pointers正是您所需要的。
我还建议您查看 memory
中可用的其他智能指针。标准库。
编辑:
请注意,如解释的here您应该使用 delete[]
作为拥有数组类型的智能指针的析构函数。
关于C++如何仅在没有其他人直接或间接引用该指针时删除对象指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36382868/