容器很聪明,能够做很多事情。容器析构时,会调用元素的析构函数。但是,如果是元素为指针,会出现内存泄漏。

...
std::vector<Widget*> datas;
for (int idx = 0; idx < 100; ++idx)datas.push_back(new Widget);
...

datas析构时,不会为其指针元素调用delete,所以你必须自己在容器析构时手动delete。

...
for (auto* pWidget : datas)delete pWidget;

如果你对代码要求比较高,想要达到“异常安全”,
上面代码就无能为力了。智能指针可以达到这个要求,修改如下:

...
using WidgtPtr = std::shared_ptr<Widget>;
std::vector<Widget> datas;
for (int idx = 0 ;idx < 100; ++idx)datas.push_back(Widget(new Widget));
...

STL很智能,但没有智能到知道是否该删除自己所包含的指针的程度。当你使用指针的容器,而其中的指针应该删除时,为了避免资源泄漏,你必须或者用引用计数形式的智能指针对象代替指针,或者当容器被析构时手工删除其中的每个指针。

4.如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉相关推荐

  1. OpenShift Security (10) - 用红帽高级集安全产品监控容器中运行的安全违规操作

    <OpenShift 4.x HOL教程汇总> 本文已在 OpenShift 4.9 + RHACS 中测试验证. 演示视频 文章目录 场景说明 查看 Runtime 策略 部署测试应用 ...

  2. k8s中使用MySQL共享存储_Kubernetes创建挂载共享存储的容器

    在上一次的Mysql容器中,已经使用过了配置宿主机目录挂载的方式,这样虽然方便但是不够安全:一般都是把数据存储在远程服务器上如:NFS,GlusterFS,ceph等:一般目前主流的还是使用ceph. ...

  3. python类中包含一个特殊的变量、它可以访问类的成员_Python类中包含一个特殊的变量( ),它表示当前对象自身,可以访问类的成员....

    包含票务系统的业务管理主要内容包括()A:运营监督B:规则管理C:信息管理D:财务管理E:模式管理 特殊表嘌呤核苷酸补救合成途径的主要器官是().A:脑组织B:小肠C:胸腺D:肝脏E:肾脏 示当身嘌呤 ...

  4. MOSS中对列表的一些操作(创建,查询等)

    原贴地址: www.cnblogs.com/carysun    作者:生鱼片 http://tech.ddvip.com/2008-10/122527135586704.html 1.查询列表的所有 ...

  5. cocos2d-x中为什么要用sharedXX()函数创建单例类的static对象

    如果在需要用到单例类对象时直接使用static成员对象,那么由于编译器对于不同的编译单元的编译顺序的不确定性,有可能在用到该static对象的时候该对象还没有初始化,而用函数sharedXX()创建单 ...

  6. 在Docker容器中的Tomcat上运行ADF Essentials

    我经常开发示例应用程序. 我尝试了一些想法,运用了一些技巧,并通过示例应用程序与同事和博客读者分享了我的调查结果. 当某人想要了解该技术的实现方式时,他们只需查看源代码,就足以理解这个想法. 但是,如 ...

  7. sql docker容器_了解SQL Server Docker容器中的备份和还原操作

    sql docker容器 In this 17th article of the series (see the full article index at bottom), we will disc ...

  8. 如何在Docker容器中运行Docker [3种方法]

    在本博客中,我将向您介绍在docker中运行docker所需的三种不同方法. Docker In Docker的用处 dockerIndocker的一个潜在用处是CI管道,在代码成功构建后,您需要在其 ...

  9. 为什么建议一个容器中只运行一个进程

    文章首发于:https://www.cnblogs.com/JasonCeng/p/14814888.html 在云原生与容器化时代浪潮下,大多数新手的普遍认识是"容器=虚拟机", ...

最新文章

  1. LSTM神经网络Demystifying LSTM neural networks
  2. CentOS 安装Python 3.52
  3. c# 打开的窗口显示在最前面_了解各种切换程序窗口的方法,提高工作效率
  4. python按行读取excel文件_python3读取excel文件只提取某些行某些列的值方法
  5. flink Table API 与SQL入门实战
  6. php7视频处理扩展_PHP7扩展开发之类型处理
  7. linux 设置多网段ip 地址,举例说明Linux不同网段访问的设置办法
  8. 管理活动目录域服务实训_工商管理学院党总支举行校园公益服务活动
  9. 红米手机html文件,红米手机怎么传文件到电脑
  10. 转载:GNS3安装和使用教程
  11. Vue3的生命周期的使用
  12. 如何对PDF文件中的内容进行编辑修改
  13. ArcGIS基础知识之shape文件的构成
  14. For循环的简单实例
  15. matlab 错误使用*
  16. 有趣的灵魂是什么样的
  17. Look Into Person数据集的错误!!
  18. 暗黑2浴火重生zclient注册账号
  19. 电脑键盘上方的功能键有时候不能用
  20. centos关机重启命令

热门文章

  1. JavaScript中闭包实现的私有属性的getter()和setter()方法
  2. 直接用img 的src属性显示base64转码后的字符串成图片【原】
  3. C printf()函数转换说明符
  4. 兴趣记忆法(1)顺口溜记忆
  5. [基础题]4、设计一个家政服务规范: 洗衣服, 扫地, 买菜, 做饭
  6. PowerShell渗透工具Nishang
  7. LeetCode Algorithm 543. 二叉树的直径
  8. 手把手教你Android Studio的安装与配置
  9. 为何外界常说扎克伯格是机器人?源于2018年的一场听证会
  10. 《数据库原理与应用》(第三版)第9章 事务与并发控制 基础 习题参考答案