c++ - boost::shared_ptr 循环中断与weak_ptr

标签 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);

我知道这行不通,因为引用将继续相互指向。我还被告知 weak_ptr 解决了这个问题。

但是,weak_ptr 没有 get 或 -> 重载。我听说过“使用 lock()”,但是谁能提供如何正确执行此操作的代码示例吗?

最佳答案

我认为这里更大的问题是所有权不明确。您最好决定 A 是否封装 B 或反之亦然。如果这不可能,那么您最好引入另一个同时拥有 ABC 类

假设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/

相关文章:

c++ - 计算字符串中元音的函数

c++ - 如何解决 - 错误 : there are no arguments to 'exit' that depend on a template parameter

c++ - 将 boost::any 实例转换为其真实类型

c++ - Async_Read 函数的问题

c++ - 使用唯一的指针调用函数会使我的程序崩溃

c++ - 应该编写什么代码来接受小写和大写选择?

c++ - 无法检索刚刚创建的窗口的标题

c++ - 如何在 Linux 中查看 .o 文件的信息和编译器标志?

visual-c++ - 如何将 GetProfileBinary 的结果保存到智能指针中?

c++ - 如何在函数中传递智能指针?