比如:
class A
{
A() {printf("constructor/n");};
~A() {printf("deconstructor/n")};
}
int main()
{
A *p = new A[2];
delete p;
}
结果是调用2次构造、2次析构函数
delete p时正是由于存在计数器,才能知道创造出了数组的大小。
计数器的位置是 (int *)p - 1
if change main function to:
int main()
{
A *p = new A[2];
*((int *)p) -= 1;
delete p;
}
结果是调用2次构造、1次析构函数
这也就是C++的隐式计数。