【发布时间】:2010-03-26 02:35:18
【问题描述】:
对于没有默认构造函数的类,可以使用 operator new 和placement new 来声明该类的数组。
当我阅读More Effective 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;
}
【问题讨论】:
-
这有点像stackoverflow.com/questions/2498183/…,但这个问题实际上并没有产生任何答案,只是“全局运算符 new 是一个不应该出现的愚蠢特性”的许多变体首先是 C++,任何称它为裤子气味的人”。另一方面,这个确实有一些答案,基本上“没有区别,只需使用正确版本的
operator delete”:stackoverflow.com/questions/2499895/… -
如果您记得
delete[]您的记忆,您会看到它的唯一不同之处。:)
标签: c++ placement-new new-operator