デフォルト コンストラクターのないクラスの場合、演算子 new と配置 new を使用して、そのようなクラスの配列を宣言できます。
More Effects C++ でコードを読んでみると、以下のようなコードを見つけました(一部改変しています).....
私の質問は、なぜ演算子 new の後に [] が必要なのですか?
私はそれなしでテストしましたが、それでも動作します。誰かがそれを説明できますか?
class A {
public:
int i;
A(int i):i(i) {}
};
int main()
{
void *rawMemory = operator new[] (10 * sizeof(A)); // Why [] needed here?
A *p = static_cast<A*>(rawMemory);
for(int i = 0 ; i < 10 ; i++ ) {
new(&p[i])A(i);
}
for(int i = 0 ; i < 10 ; i++ ) {
cout<<p[i].i<<endl;
}
for(int i = 0 ; i < 10 ; i++ ) {
p[i].~A();
}
return 0;
}