C++中STL的vector容器的析构函数不用自己调用,系统会进行析构,但是vector内元素的清空需要手动进行。
非森陪举指针的数据类型,比如 int、string、char ,还包括自此碧定义的数据结构、自定义的类 等等只需乱镇要手动调用vector的clesr函数就可以了,空间的释放和析构系统都会自动进行。
指针类型的数据,这种情况需要手动进行释放。也就是说new 产生的内存需要手动使用free进行释放。
析构函数不需要直接调用。而是在对象失效时自动调用的。所谓对象失效,是指程序已经运行出山困槐局部变量的作用域或者是对对象指针进行delete时。
比如
void foo()
{
vector
vector
ptr = new vector
// do something
delete ptr; //这里调用析逗友构函数来销毁对象。
} //当此函数运行结束时,自动调用array的析构函数~vector()。
提供你一个办法:
在文件
中,下一个饥陆断点
~vector()
{
}
看看会旦迹不会运行到,这样,你就知道,你不必自己调用模肢并 ~vector(),系统会做的。
我的机器上,是第 386 行。
试试看
这里不需要手动释放,如楼上几位所说。我说说析构函数调用的时机吧!
内存管理应该明白型凳简吧!
这里你的vector是在栈上的,所以main函数执行完后,会自动对栈进行回收,对栈进行回收时,会自动粗雹调卜裤用vector对象的析构函数,因此不需要显式调用。
~vector();不需要你调用,调用会出错,程序会自动调用的,