gpt4 book ai didi

c++ - 循环构造函数

转载 作者:行者123 更新时间:2023-11-28 08:04:51 25 4
gpt4 key购买 nike

假设结构 A 和 B 是单例结构,定义如下:

struct A
{
B& b_;
static A& shared_a() { ... }
A() : b_(B::shared_b()) { ... }
};

struct B
{
A& a_;
static B& shared_b() { ... }
B() : a_(A::shared_a()) { ... }
};

假设文件结构经过组织以便代码可以编译。

第一次调用A::shared_a时,会构造A的共享实例。A的共享实例的构造函数会调用B::shared_b,B::shared_b会构造B的共享实例。接下来,构造函数对于 B 的共享实例,将调用 A::shared_a。但是,A 的共享实例尚未完成其构造函数!因此,这些构造函数将无限循环。

为了防止这样的循环,我可以合并类 A 和 B,但我想避免这样做。有没有更优雅的解决方案?

谢谢,

山姆

最佳答案

您的代码表现出未定义的行为,您可能会遇到您提到的无限循环或任何其他奇怪的行为。现在,问题不在于如何解决它,而是打破循环依赖,这通常是一种代码味道。

如果您仍然确信您的设计是合理的,并且如果您的构造函数仅存储引用(不使用对象),您可以更改构造函数以获取对对象的引用。

同样,我会避免循环依赖。

关于c++ - 循环构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10475882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com