VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1280|回复: 2

[求助] list链表内存释放?

[复制链接]
56_avatar_middle
在线会员 发表于 2016-7-7 18:52:19 | 显示全部楼层 |阅读模式
3驿站币
  list成员函数pop_front()删掉list中的第一个元素,pop_back()删掉最后一个元素。函数erase()删掉由一个iterator指出的元素。还有另一个erase()函数可以删掉一个范围的元素。



/* || Erasing objects from a list */

#include <list>

int main (void)

{

    list<int> list1;    // define a list of integers



    /* || Put some numbers in the list || It now contains 0,1,2,3,4,5,6,7,8,9 */

    for (int i = 0; i < 10; ++i)

        list1.push_back(i);



list1.pop_front();    // erase the first element 0



    list1.pop_back();     // erase the last element 9



    list1.erase(list1.begin());

    // erase the first element (1) using an iterator



    list1.erase(list1.begin(), list1.end());

    // erase all the remaining elements



    cout << "list contains " << list1.size() << " elements" << endl;

}



输出是:

list contains 0 elements

请问erase() 函数可以释放list所分配的内存么?
搞不明白如果我存储了很多的int型值到list中,将来不用了,如果释放内存呢?  需要释放么?

最佳答案

查看完整内容

stl中所有容器 都是存儲的值 所以如果你存儲int到 std::list中 erase...後 不需要進行其他釋放操作 如果你存儲的 一個 new 或 malloc 的 int* 地址std::list erase...後 list 不會delete 或free 需要你自己 釋放指針 如果存儲int* 到容器中 又期望容器釋放 new malloc 的指針 c++11 可以使用 std::list 或者使用boost std::list




上一篇:FillRect的问题
下一篇:如何在VS2010中实现类似易语言中超级列表框的功能
74_avatar_middle
在线会员 发表于 2016-7-7 18:52:20 | 显示全部楼层
stl中所有容器 都是存儲的值 所以如果你存儲int到 std::list<int>中 erase...後 不需要進行其他釋放操作
如果你存儲的 一個 new 或 malloc 的 int* 地址std::list<int*> erase...後 list 不會delete 或free 需要你自己 釋放指針

如果存儲int* 到容器中 又期望容器釋放 new malloc 的指針
c++11 可以使用 std::list<std::shared_ptr<int>>
或者使用boost std::list<boost::shared_ptr<int>>
56_avatar_middle
ico_lz  楼主| 发表于 2016-7-8 23:40:06 | 显示全部楼层
谢谢!........
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-7-19 23:28

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表