array new,array delete
delete [] buf 调用析构函数,若为delete buf,则只会调用一次 此处int并没有析构函数,因此[]加不加是无所谓的 但如果放的是对象,且其析构函数是有意义的,则需要加[]
placement new
char *buf=new char[sizeof(Complex)*3];
Complex* pc=new(buf)Complex(1,2);
...
delete [] buf;
Complex* pc;
try{
void* mem=operator new(sizeof(Complex),buf);
pc=static_cast<Complex*>(mem);
pc->Complex::Complex(1,2);
}catch(std::bad_alloc){
}
void* operator new(size_t size,void* p){
return p;
}
注: effectiveC++中说明,每个placement new都要有对应的placement delete
C++ 分配内存途径
应用程序
c++容器
示例
上图情况会调用类内的operator new/delete 若调用全局new/delete ::new ::delete 则会强制使用全局版本
|