Effective C++读书笔记
--By Nathan.Yu 2007-12-08--
3 资源管理(之四)
条款16:成对使用new和delete时要采取相同形式(Use
the same form in corresponding uses of new and delete)
使用new时发生的事情:
1、
内存被分配(通过operator new函数)
2、
针对此内存会有一个或多个构造函数被调用。
使用delete时发生的事情:
1、
针对此内存会有一个或多个析构函数被调用。
2、
释放内存(通过operator delete函数)
delete的最大问题在于:即将被删除的内存中含多少对象?(指针所指的是单一对象还是数组?)
如果你调用new时使用[],你必须在delete时也使用[]。如果你调用new时没有使用[],那么delete时也不需[]。
最好不要对数组形式做typedefs动作。
请记住:
1、
如果你在
new表达式中使用[],必须在相应的delete表达式中也使用[]。如果你在new表达式中不使用[],一定不要在相应的delete表达式中使用[]。
条款17:以独立语句将newed对象置入智能指针(Store
newed objects in smart pointers in standalone statements)
有函数:
proessWidget(std::tr1::shared_ptr<Widget> pw, int);
有调用:
processWidget(std::tr1::shared_ptr<Widget>(new Widget), priority()); //
可能引起资源泄漏
这个调用可能引起资源泄漏!
因为C++不像Java和C#总以特定的顺序完成函数参数的核算。
因此,参数的调用过程可能是这样的:
1)
new Widget()
2)
priority() ; //如果这里产生异常,则1)new的资源就会泄漏了
3)
shared_ptr的构造函数
但可以确定1)总在3)之前。
避免这类问题的方法:
std::tr1::shared_ptr<Widget> pw(new Widget);//
以独立语句将newed对象置入智能指针
processWidget(pw, priority()); //
绝不会引起资源泄漏
请记住:
以独立语句将newed对象存储于智能指针。如果不这样做,一旦异常被抛出,有可能导致难以察觉到资源泄漏。
分享到:
相关推荐
effective c++读书笔记和总结 effective c++读书笔记和总结
effective C++读书笔记,effective C++读书笔记,effective C++读书笔记
effective C++ 很好 很不错 最好的C++进阶资料
《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷forward,rvalue引用和全局...
摘录了《Effective C++》 (Scott Meyers 著)中有参考价值的编写代码建议,方面阅读
Effective C++学习笔记 没有时间看Effictive C++书的人可以看看这个笔记 总结出了重点啊 适合有c++基础的人阅读
内容简介:有人说C++程序员可以分为两类,读过Effective C++的和没读过的。当您读过《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》之后,就获得了迅速提升自己C++功力的一个契机。
C++Primer中文第三版(C++从入门到精通)第一章的读书笔记,主要是C++程序、预处理器指示符、iostream库等的基础知识点读书笔记。
自己整理的侯捷版本<<Effective C++ 改善程序与设计的55个具体做法>> 学习笔记.
effective c++笔记1
Effective C++笔记1
Effective_C++_3rd 读书笔记 pdf
Effective C++ Roy T 读书笔记,比较老的一本书,探讨一下C++。
C++学习笔记C++学习笔记C++学习笔记C++学习笔记C++学习笔记
读书笔记-C++内存管理
c++学习笔记/知识要点精华版
C++读书笔记
c++完美学习笔记c++完美学习笔记c++完美学习笔记c++完美学习笔记
QT 4 c++ 笔记 QT 4 c++ 笔记 QT 4 c++ 笔记 QT 4 c++ 笔记 QT 4 c++ 笔记 QT 4 c++ 笔记
千锋C++笔记.zip