第一层是系统认识的变量,比如int,int*
第二层是指针指向的动态分配的空间,需要调用delete函数来释放
类里面定义的也无外乎这两种
为何要写析构函数?而且一般定义成 virtual 类型?
另外,由于别人有可能需要在你的类基础上进行定义一些东西,对你的程序进行改进。这时候,在主程序各个函数的interface是你定义的基类,delete也是调用你基类的析构函数,这时别人就无法析构自己定义的东西了,所以,你需要把你的析构函数定义成virtual的,这样别人的类会有一个析构函数表,首先调用自己的析构函数,然后调用你的,这样就可以完全析构掉了
在C++里面,任何的指针在delete时候都会调用析构函数,这也就是为什么析构函数必须写成virtual,防止memory leak
在函数中的指针有可能是基类类型的,这样造成的结果就是你析构的时候只析构了基类的成员,而派生类中新定义的成员并未析构,这样就memory leak了,所以需要重新定义析构函数