(参考自 http://www.cnblogs.com/hazir/p/new_and_delete.html)
1. new和delete不是函数,是C++的关键字.
2. new一个对象的实际操作分为两步:1). 调用标准库函数operator new分配内存 2)调用构造函数初始化(如果new的是内置类型则略过此步)
delete一个对象的实际操作也分为两步:1). 调用析构函数析构对象(如果new的是内置类型则略过此步) 2). 调用标准库函数operator delete释放内存
new和delete一个数组与new和delete一个对象步骤类似,只不过调用的是new operator[]和operator delete[]函数
3. 当new一个数组时,主要有以下两种情况:
1). 如果new的数组是含有自定义的析构函数的类类型数组,那么在开辟的数组前实际上还额外开辟了四字节空间用于存储数组大小,以便在delete[]的时候确保为每一个对象调用析构函数(当析构函数承担释放堆内存任务时尤其重要),例如:
#include<iostream> using namespace std; class A{ public: A(){} ~A(){} }; int main(){ A* p = new A[10]; cout << *((reinterpret_cast<int*>(p)-1)) << endl; delete []p; system("pause"); return 0; }