gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:22:09 26 4
gpt4 key购买 nike

我现在的情况是这样的:

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 还是相反。如果这不可能,那么您最好引入另一个同时拥有 ABclass 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com