list::pop_back是否调用T类自己里面的析构函数?

明智十兵卫光秀 2013-01-04 11:19:50
我创建了一个T结构(包含一个整数i,和一个int* p),它的构造函数是
p=(int*)malloc(i*sizeof(int))//在指针p上,分配i个整数长度的内存。

当然,对应的析构函数里面也应该有一个free(p)

现在我创建了一个T的list
当我不断的把新的T结构的个体向这个list里面push,然后再从list里面pop_back

请问pop_back是
1.直接作废掉T结构里面的成员变量呢(也就是整数i和int* p作废,但是之前malloc的内存空间还没有释放),
2.还是运行T结构的析构函数(释放了构造之时分配的内存)?


我看stl源码剖析里面,说list::pop_back函数是基于list::erase设计的,不过我没找到erase函数到底是调用T类别自己的析构函数,还是直接作废T的成员变量,这个我不清楚。

求解答
...全文
581 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
popy007 2013-01-05
  • 打赏
  • 举报
回复
如果你push进list的是T本身,而不是T指针的话。pop_back会调用T的析构,不会有问题。
wangan1985 2013-01-05
  • 打赏
  • 举报
回复
这个是不是类似于类对象作为局部变量超过作用域,自动调用析购函数了
Q652577567 2013-01-05
  • 打赏
  • 举报
回复
你要在=赋值(或者复制构造函数)的时候注意: 比如A=B; 你的A建立起来之后,也要malloc,然后析构的时候会调用你自己的析构函数。
  • 打赏
  • 举报
回复
T结构的拷贝构造函数operator=写的没问题的话 pop_back就不会有泄露

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧