其实我一开始也是使用remove的,当创建和销毁1024*1024个对象时,需要大约60分钟,这个时间长得不可忍受。
五、缺陷 这个设计也是有一定的缺陷的,就是它把内存的释放的任务都交给了析构函数,如果析构函数不被执行,则会发生内存泄漏,而且由于程序员在使用了该基类Object后,对内存的使用可能更加无道,所以如果析构函数不被执行,则其内存泄漏的数量可能是相当大的。例如,如果main函数改为如下:
int main()
{
{
Teacher *t = new Teacher;
t->createStudent();
}
cout << Student::new_count<
其运行结果如下:
从运行的结果来看,创建的10个Student对象并没有被释放,原因是t把指向的new出来的Teacher对象并没有被释放(析构),其析构函数并没有执行。若想释放内存,则要自己写代码执行:delete t;
所以使用时,我们必须保证父对象被销毁,也就是说我们必须要保存父对象的析构函数要被执行,才能达到我们的内存自动释放的目标,所以这样的设计实现的内存自动释放只是半自动的。