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

时间:2016-10-13 18:48:21

标签: c++ arrays

对于问题的尴尬措辞感到抱歉,但我不确定如何用文字更好地描述它,所以我试试一个例子

Sub HideN()

Dim RowCnt As Long
Dim BeginRow&, EndRow&, ChkCol&

BeginRow = 8
EndRow = 232
ChkCol = 6

    For RowCnt = BeginRow To EndRow
        Rows(RowCnt).Hidden = Cells(RowCnt, ChkCol).Value = 0
    Next RowCnt



End Sub

构建struct A { A* a; A() {a = new A[2];} ~A() {delete[] a;} } int main() { A aa; } 后,aa内部*a将分配一个包含两个struct A对象的数组。但在我看来,这些对象中的每一个反过来都会因默认构造函数而创建自己的A个对象数组,并在一个看似无穷无尽的循环中依次开启。我是否正确地想到这一点?

2 个答案:

答案 0 :(得分:2)

  

我认为这是正确的吗?

是。构造函数是递归调用的,并且您可能会在某些时候耗尽动态存储空间或溢出调用堆栈。

答案 1 :(得分:2)

是的,你是绝对正确的。您的代码有效地在其内部嵌入了一组对象。从本质上讲,你使这个变得不可能struct

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

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

如果您想A引用两个A,请选择两个指针。