c++循环构造依赖:类的构造函数都有指向彼此的指针
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);
先创建一个对象。然后是另一个。设置任何尚未设置的指针。就是这样。请注意,当不再有外部引用时,这些循环引用的对象不会自动释放:循环依赖需要非常显式地打破。
在存在循环依赖的地方,直接使用智能指针通常不是最佳解决方案。请考虑其他设计
很容易看出,如上所述的问题没有解决方案,因为您一次只能创建一个类实例。
相关文章:
- 如果基类包含双指针成员,则派生类的构造函数
- 复制构造函数C++无法正确复制指针
- 使用基类指针调用基类的值构造函数的语法是什么?
- C++ 对象指针数组的复制构造函数
- 构造函数 (C++) 中的 char 指针参数存在问题
- 为什么使用 std::istream_iterator 构造函数返回指针
- 在对象构造期间,将指向尚未构造的子对象的指针传递给另一个子对象的构造函数是否危险?
- 使用指向成员函数的指针在另一个类中调用类构造函数
- 通过从构造函数中的'this'复制的指针改变常量对象
- 为什么指针对象没有调用默认构造函数
- 函数返回时,带指针的复制构造函数失败
- 如何编写复制构造函数来复制指针?
- 如何使用函数(而不是构造函数)将派生类对象分配给基类指针
- 使用 Rcpp 公开将指向对象的指针作为参数的构造函数
- 类型强制转换指针构造函数调用
- shared_ptr的原始指针构造函数是一个错误吗?
- 为什么在同一类中使用不同的(共享_ptr和正常)指针构造函数,我会得到不同的结果
- Boost共享指针构造函数/析构函数
- 带有指针构造函数的指针
- Boost共享指针构造函数析构函数