C++如何仅在没有其他人直接或间接引用该指针时删除对象指针

标签 c++ pointers

我有一个对象 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/

相关文章:

C++,我可以重载类的一个点的赋值运算符吗?

c - 解释 "About size_t and ptrdiff_t"中的这段话

c++ - C/C++结构问题

c++ - 通过引用捕获异常对象、临时对象、生命周期问题

c++ - 是否可以在一个线程遇到异常时卡住所有线程

c - C中数组的问题

c++ - 成员函数指针转换,从 Derived 到 Base 类

C++——指向结构数组的指针包含指向不起作用的类数组的指针

c - 指针数组和指针数组的内存分配

c++ - "ptr = ptr -> next"这个"->"是什么意思? (C++)