Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++循环构造依赖:使用指针彼此的类构造函数_C++_Pointers_Smart Pointers_Circular Dependency - Fatal编程技术网

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问题: