Effective STL(第7条)
第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条)相关推荐
- 【C++】Effective STL:50条有效使用STL的经验
第一条:慎重选择容器类型 1.C++容器:先混个眼熟 序列容器:array.vector.string.deque.list.forward_list 有序关联容器:set.map.multiset. ...
- effective stl 第31条:了解与各种排序相关的选择
有时候不需要全部排序,比如你有一个存放Widget的向量,而你希望讲质量最好的送给顾客,那么只需要排前20个最好的Widget,其他的而不用排序,partial_sort可以实现这样的功能: #inc ...
- Effective STL 50条有效使用STL的经验笔记
Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...
- Effective STL中文版:50条有效使用STL的经验(双色)
<Effective STL中文版:50条有效使用STL的经验(双色)> 基本信息 作者: (美)梅耶(Meyers,S.) 译者: 潘爱民 陈铭 邹开红 出版社:电子工业出版社 ISBN ...
- 读 S. Meyers 之 《Effective STL 中文版:50条有效使用 STL 的经验》
S. Meyers, 潘爱民, 陈铭, 邹开红. Effective STL 中文版:50条有效使用 STL 的经验. ISBN: 978-7-121-20125-7 STL (Standard Te ...
- 《Effective STL》学习笔记(第一部分)
本书从STL应用出发,介绍了在项目中应该怎样正确高效的使用STL.本书共有7个小节50个条款,分别为 (1) 容器:占12个条款,主要介绍了所有容器的共同指导法则 (2) vector和string: ...
- 读书笔记-effective STL
目录: 1.vector,string 2迭代器 3.关联容器 4.容器 自己补充的关于stl的一点内容 5.stl中的排序 6.删除stl容器元素的方法 1.vector,string vector ...
- 两本小书的命运 --- 记《Effective STL》和《The Art Of Deception》两本书的出版翻译过程
这两年来,时常听到读者或者朋友们问我"最近还有新书要出版吗",我的回答是,有两本拖了很久的书快要出版了.我乐观地估计,这两本书在2005年都能出版,然而,不幸的是,这两本书都未能如 ...
- Effective STL 读书笔记
Effective STL 读书笔记 标签(空格分隔): 未分类 慎重选择容器类型 标准STL序列容器: vector.string.deque和list(双向列表). 标准STL管理容器: set. ...
- 《Effective STL》中文版 读书笔记
50条有效使用STL的经验 第一条 慎重选择容器类型(20190713) 第二条 不要试图编写独立于容器类型的代码(20190713) 第三条 确保容器中的对象副本正确而高效(20190713) 第四 ...
最新文章
- java显示当月数据_Java统计当月与往月数据 使用StringTemplate
- 将数据库中日期格式转换后显示在界面
- linux学习笔记 第七篇 (samba(一))(iscsi)
- PostgreSQL 8.3 以上的中文全文索引使用介绍
- Zookeeper的一次迁移故障
- Java进程占用CPU资源过多分析
- 前端学习(666):赋值运算符
- oracle表ddl,七、Oracle中DDL改变表结构操作
- 层层深入探究网络连接丢包之谜
- 算法 —— 实用程序片段
- DisplayUtils
- AMOS分析技术:测量模型分析;聊聊验证性因子分析(CFA)与探索性因子分析(EFA)的异同点
- IntelliJIDEA DEFAULT KEYMAP
- 小米手机不能发短信的一种解决方法--重新设置短信中心号码
- ad网络标号设置经验_ad放置网络标号
- 高德地图—js.api
- 成为人生的赢家都有哪些书_那么,我们是否有代码挑战#1的赢家?
- 如何用PS去掉照片中的路人
- 产品功能留存分析矩阵
- C语言数据结构代码——有向图
热门文章
- 漫步数理统计十六——变换
- [机器学习-实战篇]Imdb数据集情感分析之贝叶斯
- unity3d 取锚点位置_周三手机课实时共享位置,方便朋友找到见面地点
- Opencv--cvSetImageROI和cvResetImageROI的使用
- MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainC
- 较好的个人网址(关于编程)
- 内参、外参、畸变参数三种参数与相机的标定方法与相机坐标系的理解
- make、make clean、make uninstall的使用
- RichEdit 各个版本介绍
- QT [005] 数据库设计 - 一个被忽略的数据库show类 - ConnectionWidget Class