gpt4 book ai didi

c++ - boost::shared_ptr 循环依赖

转载 作者:太空狗 更新时间:2023-10-29 20:14:51 25 4
gpt4 key购买 nike

我有一个问题,我在每个级别使用不同的类实现了一棵树。指向树项的指针是 boost::shared_ptr<>。

因为每个级别都存储一个指向父级的指针和一个指向其子级的指针,所以头文件中存在循环依赖。

代码如下所示:

//A.hpp
class A
{
List<boost::shared_ptr<B> > children;
};

//B.hpp
class B{
boost::shared_ptr<A> parent;

};

因为我使用 boost::shared_ptr,所以我不能在 B.hhp 中使用前向声明。但我不知道如何解决这个问题。如果你能帮助我,那就太好了。

最佳答案

Because I use boost::shared_ptr I cannot use forward declaration in B.hhp

这不是真的。声明 shared_ptr<>不应该要求 pointed 类型是完整的:

#include <boost/shared_ptr.hpp>

class A;

int main()
{
boost::shared_ptr<A> pA; // OK
}

class A { };

你的问题不在于头文件的相互依赖。您绝对可以使用前向声明来打破这些依赖关系。

您遇到的问题是使彼此保持事件状态的对象之间的循环引用。要打破这个循环,请使用 boost::weak_ptr .

此外,C++11 引入了标准类模板 std::shared_ptrstd::weak_ptr (在 <memory> header 中定义),因此除非您使用 C++03,否则您应该考虑使用这些类模板而不是 Boost 的模板。

//A.hpp
class A
{
List<boost::shared_ptr<B> > children;
};

//B.hpp
class B{
boost::weak_ptr<A> parent;
};

关于c++ - boost::shared_ptr 循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15032976/

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