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)
第一个是无效的语法.但假设你的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)
显然第一个是不允许的
是的,但仅仅是因为它使用了错误的语法.以下作品:
ac[i] = Complex(i, 2.0);
Run Code Online (Sandbox Code Playgroud)
因此,声明实际上是错误的(假设Complex可以分配给它,默认情况下可以) - 不需要动态分配.