C++中STL的vector容器的析构函数怎么用?

#include <iostream>
#include <vector>
using namespace std;
int main()
{
int len;
cin>>len;
vector<char> array1(len);

for(int i=0;i<len;i++)
{
array1[i]=i+65;
cout<<array1[i]<<"\t";
}
~vector();
return 0;
}

代码提示错误: error C2955: “std::vector”: 使用类 模板 需要 模板 参数列表

C++中STL的vector容器的析构函数不用自己调用,系统会进行析构,但是vector内元素的清空需要手动进行。

    非指针的数据类型,比如 int、string、char ,还包括自定义的数据结构、自定义的类 等等只需要手动调用vector的clesr函数就可以了,空间的释放和析构系统都会自动进行。

     指针类型的数据,这种情况需要手动进行释放。也就是说new 产生的内存需要手动使用free进行释放。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-10-27
析构函数不需要直接调用。而是在对象失效时自动调用的。所谓对象失效,是指程序已经运行出局部变量的作用域或者是对对象指针进行delete时。
比如
void foo()
{
vector<int> array;
vector<int> *ptr;
ptr = new vector<int>() //这里调用构造函数来创建对象。
// do something
delete ptr; //这里调用析构函数来销毁对象。
} //当此函数运行结束时,自动调用array的析构函数~vector()。
第2个回答  2010-10-28
提供你一个办法:
在文件 <vector>
中,下一个断点
~vector()
{
}

看看会不会运行到,这样,你就知道,你不必自己调用 ~vector(),系统会做的。
我的机器上,是第 386 行。

试试看本回答被提问者采纳
第3个回答  2010-11-06
这里不需要手动释放,如楼上几位所说。我说说析构函数调用的时机吧!
内存管理应该明白吧!
这里你的vector是在栈上的,所以main函数执行完后,会自动对栈进行回收,对栈进行回收时,会自动调用vector对象的析构函数,因此不需要显式调用。
第4个回答  2010-10-26
~vector();不需要你调用,调用会出错,程序会自动调用的,

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网