第7条:如果容器中包含了通过new操作创建的指针,切忌在容器对象析构前将指针delete掉

 1 //向一个vector中添加多个new出来的对象
 2 void doSomething(){
 3 vector<Widget*> vwp;
 4 for(int i = 0; i < SOME_MAGIC_NUMBER;++i)
 5   vwp.push_back(new Widget);
 6 ...
 7 }
 8 //删除vector中的对象
 9 void doSomething(){
10 vector<Widget*> vwp;
11 ...
12 for(vector<Widget*>::iterator i = vwp.begin(); i!= vwp.end(); ++i)
13   delete *i;
14 }

两个问题:

1. for循环可以用for_each来替代,因为它的表达更清晰

2. 代码不是异常安全。如果在添加或删除的过程中有异常抛出,则会发生资源泄漏。

改进:用智能指针(被引用计数的指针)容器代替指针容器

1 void doSomething(){
2 typedef boost::shared_ptr<Widget> SPW;//SPW 指向Widget的shared_ptr
3 vector<SPW> vwp;
4 for(int i = 0; i <SOME_MAGIC_NUMBER; ++i)
5   vwp.push_back(SPW(new Widget));
6 ...
7 }

转载于:https://www.cnblogs.com/coolqiyu/p/5442667.html

Effective STL(第7条)相关推荐

  1. 【C++】Effective STL:50条有效使用STL的经验

    第一条:慎重选择容器类型 1.C++容器:先混个眼熟 序列容器:array.vector.string.deque.list.forward_list 有序关联容器:set.map.multiset. ...

  2. effective stl 第31条:了解与各种排序相关的选择

    有时候不需要全部排序,比如你有一个存放Widget的向量,而你希望讲质量最好的送给顾客,那么只需要排前20个最好的Widget,其他的而不用排序,partial_sort可以实现这样的功能: #inc ...

  3. Effective STL 50条有效使用STL的经验笔记

    Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...

  4. Effective STL中文版:50条有效使用STL的经验(双色)

    <Effective STL中文版:50条有效使用STL的经验(双色)> 基本信息 作者: (美)梅耶(Meyers,S.) 译者: 潘爱民 陈铭 邹开红 出版社:电子工业出版社 ISBN ...

  5. 读 S. Meyers 之 《Effective STL 中文版:50条有效使用 STL 的经验》

    S. Meyers, 潘爱民, 陈铭, 邹开红. Effective STL 中文版:50条有效使用 STL 的经验. ISBN: 978-7-121-20125-7 STL (Standard Te ...

  6. 《Effective STL》学习笔记(第一部分)

    本书从STL应用出发,介绍了在项目中应该怎样正确高效的使用STL.本书共有7个小节50个条款,分别为 (1) 容器:占12个条款,主要介绍了所有容器的共同指导法则 (2) vector和string: ...

  7. 读书笔记-effective STL

    目录: 1.vector,string 2迭代器 3.关联容器 4.容器 自己补充的关于stl的一点内容 5.stl中的排序 6.删除stl容器元素的方法 1.vector,string vector ...

  8. 两本小书的命运 --- 记《Effective STL》和《The Art Of Deception》两本书的出版翻译过程

    这两年来,时常听到读者或者朋友们问我"最近还有新书要出版吗",我的回答是,有两本拖了很久的书快要出版了.我乐观地估计,这两本书在2005年都能出版,然而,不幸的是,这两本书都未能如 ...

  9. Effective STL 读书笔记

    Effective STL 读书笔记 标签(空格分隔): 未分类 慎重选择容器类型 标准STL序列容器: vector.string.deque和list(双向列表). 标准STL管理容器: set. ...

  10. 《Effective STL》中文版 读书笔记

    50条有效使用STL的经验 第一条 慎重选择容器类型(20190713) 第二条 不要试图编写独立于容器类型的代码(20190713) 第三条 确保容器中的对象副本正确而高效(20190713) 第四 ...

最新文章

  1. java显示当月数据_Java统计当月与往月数据 使用StringTemplate
  2. 将数据库中日期格式转换后显示在界面
  3. linux学习笔记 第七篇 (samba(一))(iscsi)
  4. PostgreSQL 8.3 以上的中文全文索引使用介绍
  5. Zookeeper的一次迁移故障
  6. Java进程占用CPU资源过多分析
  7. 前端学习(666):赋值运算符
  8. oracle表ddl,七、Oracle中DDL改变表结构操作
  9. 层层深入探究网络连接丢包之谜
  10. 算法 —— 实用程序片段
  11. DisplayUtils
  12. AMOS分析技术:测量模型分析;聊聊验证性因子分析(CFA)与探索性因子分析(EFA)的异同点
  13. IntelliJIDEA DEFAULT KEYMAP
  14. 小米手机不能发短信的一种解决方法--重新设置短信中心号码
  15. ad网络标号设置经验_ad放置网络标号
  16. 高德地图—js.api
  17. 成为人生的赢家都有哪些书_那么,我们是否有代码挑战#1的赢家?
  18. 如何用PS去掉照片中的路人
  19. 产品功能留存分析矩阵
  20. C语言数据结构代码——有向图

热门文章

  1. 漫步数理统计十六——变换
  2. [机器学习-实战篇]Imdb数据集情感分析之贝叶斯
  3. unity3d 取锚点位置_周三手机课实时共享位置,方便朋友找到见面地点
  4. Opencv--cvSetImageROI和cvResetImageROI的使用
  5. MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainC
  6. 较好的个人网址(关于编程)
  7. 内参、外参、畸变参数三种参数与相机的标定方法与相机坐标系的理解
  8. make、make clean、make uninstall的使用
  9. RichEdit 各个版本介绍
  10. QT [005] 数据库设计 - 一个被忽略的数据库show类 - ConnectionWidget Class