C++ 循环析构函数

Ian*_*Ian 2 c++

在文件啊:

class B;
class A
{
public:
    B *b;
    A(B *b = nullptr)
    {
        this->b = b;
    }
    ~A()
    {
        delete this->b;
    }
};
Run Code Online (Sandbox Code Playgroud)

在文件 bh 中:

class A;
class B   
{
public:
    A *a;
    B(A *a = nullptr)
    {
        this->a = a;
    }
    ~B()
    {
        delete this->a;
    };
};
Run Code Online (Sandbox Code Playgroud)

让我们假设我们有一个指向 A *对象的指针,并且我们想要删除它:

// ...
A *a = new A();
B *b = new B();
A->b = b;
B->a = a;
// ...

delete a;

// ...
Run Code Online (Sandbox Code Playgroud)

A 的析构函数会说删除 B;即调用 B 的析构函数。B 的析构函数会说 delete A.death loop lé infinitè。

有没有更好的方法来编写代码来解决这个问题?这不是紧迫的问题,只是好奇。

谢谢!

Alb*_*ert 5

使用智能指针(即std::shared_ptr)和弱指针(即std::weak_ptr)代替纯指针。

您必须定义哪个类真正拥有哪个类。如果没有人拥有另一个,则两者都应该是弱指针。