C++ 循环构造依赖:class 个构造函数相互取一个指针
C++ circular construction dependency: class constructors taking a pointer to each other
我有以下类
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 风格的指针我可以实现这一点。它也适用于共享指针吗?我尝试了 reset() 和 swap() 方法,但没有成功。
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);
没有成功。
先创建一个对象。然后是另一个。设置任何尚未设置的指针。而已。请注意,当不再有外部引用时,这些循环引用对象不会自动释放:需要非常明确地打破循环依赖。
在存在循环依赖的情况下,直接使用智能指针通常不是最优方案。请考虑其他设计。
很容易看出上述问题无解,因为您一次只能创建 class 个实例之一。
我有以下类
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 风格的指针我可以实现这一点。它也适用于共享指针吗?我尝试了 reset() 和 swap() 方法,但没有成功。
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);
没有成功。
先创建一个对象。然后是另一个。设置任何尚未设置的指针。而已。请注意,当不再有外部引用时,这些循环引用对象不会自动释放:需要非常明确地打破循环依赖。
在存在循环依赖的情况下,直接使用智能指针通常不是最优方案。请考虑其他设计。
很容易看出上述问题无解,因为您一次只能创建 class 个实例之一。