为什么C++构造函数必须使用数组的动态分配?

Mar*_*ark 2 c++ object dynamic-arrays

在我的课程笔记中,给出了这两个例子.显然第一个是不被允许的,是否有技术原因导致我无法在堆栈上分配?或者这是C++标准?

   // Constructor may force dynamic allocation when initializating an array of objects.

   Complex ac[10];             // complex array initialized to 0.0
    for ( int i = 0; i < 10; i += 1 ) {
         ac[i] = (Complex){ i, 2.0 } // disallowed
    }


    // MUST USE DYNAMIC ALLOCATION
    Complex *ap[10];            // array of complex pointers
    for ( int i = 0; i < 10; i += 1 ) {
         ap[i] = new Complex( i, 2.0 ); // allowed
    }
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 7

第一个是无效的语法.但假设你的Complex类有一个公共拷贝赋值运算符(隐式的应该可能没问题),那么下面应该没问题:

Complex ac[10];             // complex array initialized to 0.0
for ( int i = 0; i < 10; i += 1 ) {
     ac[i] = Complex( i, 2.0 );
}
Run Code Online (Sandbox Code Playgroud)

  • @Mike:是的.但是这个假设是基于OP只在他的代码片段中将一行评为"不允许"的事实. (3认同)

Kon*_*lph 6

显然第一个是不允许的

是的,但仅仅是因为它使用了错误的语法.以下作品:

ac[i] = Complex(i, 2.0);
Run Code Online (Sandbox Code Playgroud)

因此,声明实际上是错误的(假设Complex可以分配给它,默认情况下可以) - 不需要动态分配.