很抱歉这个问题的措辞很尴尬,但我不确定如何用文字更好地描述它,所以我会尝试举个例子
struct A {
A* a;
A() {a = new A[2];}
~A() {delete[] a;}
}
int main() {
A aa;
}
一旦构造了aa
,struct A
内部的*a
将被分配一个包含两个A
的数组> 对象。但在我看来,作为默认构造函数的结果,这些对象中的每一个都将依次创建它们自己的 A
对象数组,并且在看似无穷无尽的循环中不断循环。我这样想对吗?
最佳答案
是的,你完全正确。您的代码有效地在自身内部嵌入了一组对象。本质上,您正在使这个不可能的 struct
:
struct A {
A a[2]; // Impossible
};
您的代码通过使用指针绕过编译器的检查,因此代码在运行时由于无限递归而崩溃。
如果你想让 A
可选地引用两个 A
,请创建一个包含两个指针的数组。
关于c++ - 与它所属的类相同类型的对象的数组是否会创建无限实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40028724/