Effective C++(三):资源管理

个人读书记录,不适用教学内容。

目录

条款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()内部会不会抛出异常从而跳出这个语句,导致内存泄漏

猜你喜欢

转载自blog.csdn.net/Jason6620/article/details/128383078