boost :: shared_ptr使用weak_ptr循环中断

The*_*uck 2 c++ boost smart-pointers circular-dependency weak

我目前的情况如下:

struct A {  
  shared_ptr<B> b;  
};  
struct B {  
  shared_ptr<A> a;  
};

//...
shared_ptr<A> a(new A());
shared_ptr<B> b(new B());  
a->b(b);
b->a(a);
Run Code Online (Sandbox Code Playgroud)

我知道这不起作用,因为引用将继续指向彼此.我也被告知weak_ptr解决了这个问题.

但是,weak_ptr没有得到或->超载.我听说过"使用lock()",但任何人都可以提供如何正确执行此操作的代码示例吗?

Mhm*_*mmd 6

我认为这里更大的问题是模糊的所有权.你最好决定是A封装B还是反过来.如果这是不可能的,那么你仍然关闭引入另一种更好class C的是同时拥有AB.

假设A拥有B,你可以写:

classs B;

classs A
{
private:
    boost::scoped_ptr<B> b_;
public:
    A() : b_(new B()) {}
}

class B
{
private:
    A* a_;
public:
    B(A* a) : a_(a) {}
}
Run Code Online (Sandbox Code Playgroud)

等等.你甚至可以scoped_ptr通过使B成为局部变量或在析构函数中手动删除它来消除它.

谷歌C++风格指南有更多的标题为这个说:" 智能指针 ".

HTH