c++ - 与它所属的类相同类型的对象的数组是否会创建无限实例?

标签 c++ arrays

很抱歉这个问题的措辞很尴尬,但我不确定如何用文字更好地描述它,所以我会尝试举个例子

struct A {
    A* a;
    A() {a = new A[2];}
    ~A() {delete[] a;}
}

int main() {
    A aa;
}

一旦构造了aastruct A 内部的*a 将被分配一个包含两个A 的数组> 对象。但在我看来,作为默认构造函数的结果,这些对象中的每一个都将依次创建它们自己的 A 对象数组,并且在看似无穷无尽的循环中不断循环。我这样想对吗?

最佳答案

是的,你完全正确。您的代码有效地在自身内部嵌入了一组对象。本质上,您正在使这个不可能的 struct:

struct A {
    A a[2]; // Impossible
};

您的代码通过使用指针绕过编译器的检查,因此代码在运行时由于无限递归而崩溃。

如果你想让 A 可选地引用两个 A,请创建一个包含两个指针的数组。

关于c++ - 与它所属的类相同类型的对象的数组是否会创建无限实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40028724/

相关文章:

c++ - 在这种情况下如何防止 C++ 输出/控制台表单关闭

arrays - 将数组内容推送到 DataFrame - Julia

sql - 不能在数组列中使用 Where 条件

arrays - angular2 创建关联数组

c - 如何使用结构体、malloc 和数组为以下 C 函数编写代码?

c++ - 我如何告诉 GCC 为 -l 使用自定义库而不是系统库?

c++ - 在遍历嵌套 vector 时删除元素

c++ - TMP C++ 和参数包

c++ - findHomography()中得到的矩阵的单应分解

Python 元组数组