个人读书记录,不适用教学内容。
目录
条款13:以对象管理资源
条款14:在资源管理类中小心copying行为
条款15:在资源管理类中提供对原始资源的访问
条款16:成对使用new和delete时要采取相同形式
条款17:以独立语句将newed对象置入智能指针
条款13:以对象管理资源
说白了就是依赖于C++的析构函数自动调用机制确保资源被释放。
由此想到智能指针。RAII(Resource Acquisition Is Initialization)
条款14:在资源管理类中小心copying行为
简言之,就是对于RAII类或者就是普通类的复制,可采取如下方式:
- 禁止复制:将copying行为声明为private
- 对资源使用引用计数法(shared_ptr)
- 深拷贝
- 转移资源拥有权(参考C++11的std::move)
条款15:在资源管理类中提供对原始资源的访问
条款16:成对使用new和delete时要采取相同形式
说白了就是:用new就用delete,用new []就用delete [],不能互相串着用。
这里值得学习的是单一对象和对象数组的内存布局,以及delete如何知道内存存有多少对象。这个决定了有多少个析构函数必须被调用。
这只是一个例子,在不同编译器可能实现不同。
对于delete,原文如下:
”由你来告诉delete:如果你使用delete加上[],delete便认定指针指向一个数组,否则它便认定指针指向单一对象“
"假如内存布局如上,delete会读取若干内存并将它解释为数组大小,然后开始多次调用析构函数,浑然不知他所处理的那块内存不是个数组"
条款17:以独立语句将newed对象置入智能指针
说白了就是尽量要这样写代码:
而不要这样:
因为你不知道priority()内部会不会抛出异常从而跳出这个语句,导致内存泄漏