不同意义的new和delete
1,new operator
2,operator new (即new expression)
3,Placement new
new operator :
string *ps = new string(“memory”);
以上动作实际做了两件事:
1,分配足够的内存。
2,调用一个constructor为刚分配的内存中的那个对象设定初值。
operator new :
通用声明:
void * operator new(size_t size);
函数里面具体是做什么,就看你的了,基本上都是直接返回一个原始的、未设置初值的内存。
可以这样调用:
void * tp = operator new(sizeof(string));
Placement new:
针对一个已存在的对象调用其constructor。
使用举例:
class Dog{
Dog(int dogsize);
.......};
Dog* constructorDogInBuffer(void* buff, int dogsize)
{
return new (buff) Dog(dogsize);
}
//---------------------------------delete分割线-----------------------------------------//
1,operator delete
2,delete operator
operator delete:
通常声明:
void operator delete(void *momery);
与operator new搭配使用:
string *ps = new string("data");
delete ps;
最后一个动作实际是分解成两步操作:
ps->~string(); //调用对象析构函数
operator delete(ps); //释放内存
operator delete:
处理原始的,未设置初值的内存进行释放。
与operator new 搭配使用。这两个操作相当于C的malloc和free。
对于使用Placement new进行初始化内存的对象,应该在对象释放前主动调用其析构函数!然后再释放内存。