1 new的过程
先分配memory,再调用ctor(构造函数)
Complex* pc = new Complex(1, 2);
//编译器转化为:
Complex *pc;
void* mem = operator new( sizeof (Complex) );//operator new内部调用malloc
pc = static_cast<Complex*>(mem);
pc->Comlex::Complex(1, 2);
2 delete过程
先调用析构,再释放内存
Complex* pc = new Complex(1, 2);
...
delete pc;
//编译器转化为:
Complex::~Complex(pc); //析构函数
operator delete(pc); //释放内存,内部是调用free(pc)
3 new和delete,new数组和delete [] p
new数组要搭配delete [] p使用,因为一个delete调用一次析构,如果不用[]会导致另外几个对象的成员变量没有释放,造成内存泄露;虽然complex可以不用,但是还是得养成好习惯
String* p = new String[3];
....
delete p;//只调用了一次析构,另外两个的char* 成员就没有释放掉,造成内存泄露
//应该是
delete [] p;