两个类的前向声明会在构造函数中导致循环依赖吗?

杰伊·霍克

可以吗?我正在尝试确定构造函数中是否存在循环依赖的风险。

头文件:

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 
}

在此先感谢您分享知识。

凯·古瑟

由于B没有包含类型的实际对象,A而仅包含引用,因此这里没有出现循环依赖关系这样,*A::cObj在构造时具有明确定义的大小,并且不依赖于的实现细节A(如果B包含实际值A而不是引用,则将发生循环依赖关系,创建an所需的内存A将是无限的)。

让我们看一个小例子(我aObjLocal公开只是为了能够打印地址):

int main(){                                                                                          
 A a;                                                                                               
 std::cout << "Address of a:                   " << &a << std::endl;                                                                      
 std::cout << "Address of aObjLocal of a.cObj: " << &((*(a.cObj)).aObjLocal) << std::endl;                                                
}  

输出看起来像这样

Address of a:                   0x7ffe68b95f70
Address of aObjLocal of a.cObj: 0x7ffe68b95f70

因此a.cObj确实包含对的正确引用a,代码按预期工作(假设此行为是预期的)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

带有友元函数的两个依赖类的前向声明

如何在 Angular 中导出两个构造函数?

内部类中有两个声明的构造函数

我是否应该为 a) 所有前向声明和 b) 公共函数设置两个标题

Python类中的两个构造函数

在类构造函数中进行两个选择

C ++关于两个类构造函数的问题

循环依赖项(typedef上的类,classdef上的typedef),前向声明给出了模糊的调用?

两个构造函数

两个构造函数?

类构造函数中的循环依赖

如何将模板类构造函数作为前向声明

wsimport两个声明导致冲突

Kotlin 中具有两个不同构造函数的数据类构造函数

两个没有默认构造函数的相互依赖的成员函数

具有循环依赖关系的两个相互依赖的类的类型提示

C ++前向声明类在嵌入类中的一个朋友函数

在同一个类中定义的这两个函数如何在不进行前向声明的情况下彼此调用?

循环依赖 C++ 因前向声明而失败

我可以在没有任何前向声明的类/结构上访问静态成员函数吗?

Jaxb:wsdl 中的两个声明导致 objectFactory 类中的冲突

xjc:两个声明导致ObjectFactory类发生冲突

循环遍历两个 seq 声明

类的前向声明导致不完整的类型错误

在C ++中,是否可以分别声明和实例化不提供默认构造函数的类的实例,并将其实例化(两个步骤)

声明具有相同args的两个构造函数的最理想的方法是什么?

我需要相互包含两个头文件而不使用前向声明导致“不完整类型”错误

两个依赖类c ++

在构造函数中声明数组:它会导致指针悬空吗?