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()",但任何人都可以提供如何正确执行此操作的代码示例吗?
我认为这里更大的问题是模糊的所有权.你最好决定是A封装B还是反过来.如果这是不可能的,那么你仍然关闭引入另一种更好class C的是同时拥有A和B.
假设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