class A {};
A* a = new A()
delete a;
a = null; // delete并不会改变指针a, 但是a指向的内存已经释放, 通过赋空避免产生野指针.
new实际上执行两个过程:
1. ::operator new : 分配内存
2. constructor : 执行类A的构造函数
所以delete也同样对应两个过程
1. destructor : 执行类A的析构函数
2. ::operator delete : 释放内存
所以我们需要注意的是: 调用析构函数并不会释放内存, 单独调用析构函数会造成内存泄漏.