在C++中,调用delete的时候,系统会自动调用已分配的对象的析构函数,然后释放指定内存。
然而,通过验证可以发现,delete所谓的释放内存,只是将指定空间定义为可分配内存,该空间仍保留原有的值,且可以访问。
上述验证只是验证了部分情况,在一些更复杂的情况下却不一定正确,之后将对此进行补充。
测试样例
#include <iostream>
using namespace std;
class A{
public:
int value;
A * next;
A(int a) : value(a), next(NULL){}
void test(){ cout << "This is a test." << endl;}
};
int main(){
A* a0 = new A(10);
//Test case 1
A* a1 = new A(3); a1->next = a0;
cout << "Before deletion a1 value: " << a1->value << ", next value: " << a1->next->value << endl;
delete a1;
cout << "After deletion a1 value: " << a1->value << ", next value: " << a1->next->value << endl;
a1 = NULL;
a1->test();
//Test case 2
A* a2 = new A(4); a2->next = a0;
cout << "Before deletion a0 value: " << a2->next->value << endl;
delete a0; a0 = NULL;