C++循环构造依赖:使用指针彼此的类构造函数
我有以下课程C++循环构造依赖:使用指针彼此的类构造函数,c++,pointers,smart-pointers,circular-dependency,C++,Pointers,Smart Pointers,Circular Dependency,我有以下课程 class a { std::shared_ptr<b> b_ref; public: a(std::shared_ptr<b> b_ref) : b_ref(b_ref) {} }; class b { std::shared_ptr<a> a_ref; public: b(std::shared_ptr<a> a_ref) : a_ref(a_ref
class a {
std::shared_ptr<b> b_ref;
public:
a(std::shared_ptr<b> b_ref) : b_ref(b_ref) {}
};
class b {
std::shared_ptr<a> a_ref;
public:
b(std::shared_ptr<a> a_ref) : a_ref(a_ref) {}
};
现在我想创建两个相互引用的对象,有什么方法可以做到这一点吗?我想用c风格的指针我可以做到这一点。它也适用于共享指针吗?我尝试了重置和交换方法,但没有成功
std::shared_ptr<a> a_ref;
std::shared_ptr<b> b_ref;
a_ref = std::make_shared<a>(b_ref);
b_ref = std::make_shared<b>(a_ref);
不起作用。先创建一个对象。然后是另一个。设置所有尚未设置的指针。就这样。请注意,这些循环引用对象在没有更多外部引用时不会自动释放:需要非常明确地打破循环依赖关系
如果存在循环依赖,直接使用智能指针通常不是最佳解决方案。请考虑其他设计。 < P >很容易看出,所陈述的问题没有解决办法,因为一次只能创建一个类实例。用弱指针或普通指针替换一个共享的\u ptr成员这个问题的理由是什么?@curiousguy没有办法构造两个相互引用的类,一只鸡和一只鸡egg@DieterL是的,只要成员指针是常量,没有解决办法。一个弱ref会有什么帮助?@curiousguy这个问题是一个XY问题: