fncs:operator new和operator new[](不是new和new[]运算符)之间有什么区别吗?除了调用语法,当然。我问这个问题是因为我可以使用::operator new(sizeof(T)*numberOfObject)来分配X个字节的对象,并使用数组表示法访问它们,那么::operator new[]有什么大不了的呢?它只是一种语法糖吗?
#include <new>
#include <iostream>
#include <malloc.h>
using namespace std;
struct X
{
int data_;
X(int v):data_(v){}
};
int _tmain(int argc, _TCHAR* argv[])
{
unsigned no = 10;
void* vp = ::operator new(sizeof(X) * no);
cout << "Mem reserved: " << _msize(vp) << '\n';
X* xp = static_cast<X*>(vp);
for (unsigned i = 0; i < no; ++i)
{
new (xp + i) X(i);
}
for (unsigned i = 0; i < no; ++i)
{
cout << (xp[i]).data_ << '\n';
}
for (unsigned i = 0; i < no; ++i)
{
(xp + i)->~X();
}
::operator delete(vp);
return 0;
}
operator new[]
。也许你发布了属于其他问题的代码? - Cheers and hth. - Alfdelete
,来代替一个内存泄漏。标准规定“delete-expression”运算符销毁由“new-expression”创建的最派生对象或数组。”vp
确实指向由“new-expression”创建的对象,但它是放置(placement)new,而且new和delete的调用不匹配。具体地说,以这种方式调用delete vp;
并不能撤消它之前的vp = ::operator new(sizeof(X) * no);
语句。 - Ben Voigt