array new,array delete

 delete [] buf 调用析构函数,若为delete buf,则只会调用一次
 
 
 此处int并没有析构函数,因此[]加不加是无所谓的
 但如果放的是对象,且其析构函数是有意义的,则需要加[]
placement new
char *buf=new char[sizeof(Complex)*3];
//(buf) 括号内部即为operator new参数
Complex* pc=new(buf)Complex(1,2);
...
delete [] buf;
//====================
//Complex* pc=new(buf)Complex(1,2);
//编译器转变为如下
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
 则会强制使用全局版本
 










