new/delete operator和operator new/delete
关于new/delete存在两种情况,一种是new/delete operator和operator new/delete。那么两者有什么区别呢?
我们一般使用的new/delete都是语言内建的操作符,即new operator,类似于sizeof,所以被改变意义,它是不可以重载的,总是完成相同的功能。并且它的功能分为两个方面:
1.分配足够的内存来放置某类型的对象;
2.它会调用对象的构造函数,为步骤1分配的内存对象设定初值。
new operator总是做这两种事情。同理,delete operator也是做两种事情,首先会析构new产生的对象,然后释放该对象所占用的内存。
而operator new只是一个函数名称,执行必要的内存分配动作。因此可以重载或者重写该函数,改变其行为。该函数的声明通常为:
s->~string();operator delete(s);