c++中list用clear函数清空后,保存的变量会析构吗?

我的用法是list<string>l_str;在l_str里存入若干数据后,调用l_str.clear();来清空。问下里面保存的string会释放内存吗?若是list<... 我的用法是list<string> l_str;
在l_str里存入若干数据后,调用l_str.clear();来清空。问下里面保存的string会释放内存吗?
若是list<自定义类>这样呢,调用clear()后是否会自动调用自定义类的析构函数释放内存?
展开
 我来答
潮范君
2014-07-21 · 知道合伙人软件行家
潮范君
知道合伙人软件行家
采纳数:1440 获赞数:2874
从事软件开发工作一年有余,主要C++方向。

向TA提问 私信TA
展开全部
会析构 ,你clear后,会清空所有保存的变量,同样会调用该变量的析构函数进行清理。
viichi
2014-07-21 · TA获得超过355个赞
知道小有建树答主
回答量:158
采纳率:0%
帮助的人:208万
展开全部
stl 中的所有容器,当元素被erase或者clear后,会调用元素类型的析构函数

所以,你的两个问题,答案都是 会 调用 析构函数。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
panelwork
2014-07-21 · TA获得超过615个赞
知道小有建树答主
回答量:562
采纳率:0%
帮助的人:567万
展开全部
只要不是裸指针,都是会被析构的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tattackor
推荐于2018-06-19 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:876万
展开全部
1、会析构 ,使用clear函数后,会清空所有保存的变量,同样会调用该变量的析构函数进行清理。
2、vector,clear()并不真正释放内存(这是为优化效率所做的事),clear实际所做的是为vector中所保存的所有对象调用析构函数(如果有的话),然后初始化size这些东西,让觉得把所有的对象清除了。真正释放内存是在vector的析构函数里进行的,所以一旦超出vector的作用域(如函数返回),首先它所保存的所有对象会被析构,然后会调用allocator中的deallocate函数回收对象本身的内存。
  所以,某些编译器clear后还能访问到对象数据(因为它根本没清除),在一些比较新的C++编译器上(例如VS2008),当进行数组引用时(例如a[2]这种用法),STL库中会有一些check函数根据当前容器的size值来判断下标引用是否超出范围,如果超出,则会执行这样一句:
  _THROW(out_of_range, "invalid vector<T> subscript");
  即抛出一个越界异常,clear后没有捕获异常,程序在新编译器编译后就会崩溃掉。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式