【发布时间】:2018-08-10 00:15:24
【问题描述】:
这是允许的吗?我正在尝试确定构造函数中是否存在循环依赖的风险。
头文件:
class B; //forward declaration
class A
{
public:
std::unique_ptr<B> cObj;
std::vector<B*> cList;
A();
};
class B
{
public:
B(A& aObj) : aObjLocal(aObj) {};
void ShareData(int result);
private:
A& aObjLocal;
};
Cpp 文件:
void B::ShareData(int result)
{
for (auto& iterator : aObjLocal.cList)
{
(*iterator).ShareData(result);
}
}
A::A()
{
cObj = std::make_unique<B>(*this); // <- Will this cause circular dependecy
}
提前感谢您分享知识。
【问题讨论】:
-
关于循环依赖的事情是你可以简单地测试它是否编译。如果它已编译,则没有循环依赖。那么,你的程序编译了吗?
-
这很复杂。是的,它的编译。但是,此代码尚未在任何地方使用。它只会在未来被消耗。
-
cObj = std::make_unique<B>(*this);不应编译为cObj是B *并且没有从唯一指针到常规指针的隐式转换。 -
@Phil970 ,我的意思是让 B 成为智能指针。我已经更正了代码。感谢您指出。您能否澄清一下这里是否存在循环依赖的情况?
标签: c++ constructor circular-dependency forward-declaration