13.1.3 operator delete
new表达式的反面是delete表达式。delete表达式首先调用析构函数,然后释放内存(经常是调用free())。正如new表达式返回一个指向对象的指针一样,delete表达式需要一个对象的地址。
上面的表达式清除了早先创建的动态分配的MyType类型对象。
delete只用于删除由new创建的对象。如果用malloc()(或calloc()或realloc())创建一个对象,然后用delete删除它,这个动作行为是未定义的。因为大多数默认的new和delete实现机制都使用了malloc()和free(),所以很可能会没有调用析构函数就释放了内存。
如果正在删除的对象的指针是0,将不发生任何事情。为此,人们经常建议在删除指针后立即把指针赋值为0以免对它删除两次。对一个对象删除两次可能会产生某些问题。