2. C++ arraynew、malloc和free中的cookie
一. arraynew and deletenew
原理
由图可见,new A[size](size=3)时,构造函数被调用了三次:分别先[0]、后[1]再[2];delete [] A时,析构函数次序逆反也调用了三次:分别先[2]、后[1]再[0]。
注意:如果delete [] A去掉[],会发生内存泄漏,具体见下文。
模拟与结果
#include <iostream>
#include <string>
using namespace std;
class A {
public:
int id;
A() :id(0) {
cout << "default ctor. this=" << this << ", id=" << id << endl;
}
A(int i) :id(i) {
cout << "ctor.this=" << this << ", id=" << id << endl;
}
~A() { cout << "dtor