我目前的情况是这样的:
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);
我知道这行不通,因为引用将继续相互指向。我还被告知 weak_ptr
解决了这个问题。
但是,weak_ptr
没有 get 或 ->
重载。我听说过“使用 lock()
”,但是谁能提供如何正确执行此操作的代码示例吗?
最佳答案
我认为这里更大的问题是所有权不明确。您最好决定 A
是否封装 B
或反之亦然。如果这不可能,那么您最好引入另一个同时拥有 A
和 B
的 C 类
。
假设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) {}
}
等等。您甚至可以通过将 B 设置为局部变量或在析构函数中手动删除它来摆脱 scoped_ptr
。
Google C++ Style Guide在标题为“Smart Pointers”的部分中有更多内容要说。
HTH
关于c++ - boost::shared_ptr 循环中断与weak_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3577268/