CppCon笔记--Back to Basics: RAII and the Rule of Zero

C++编程很多时候需要手动管理资源,其中包括资源的获取,使用和释放,而手动对资源释放是很容易出错的一个环节。

CppCon笔记--Back to Basics: RAII and the Rule of Zero

根据C++的特性,当局部对象的生命周期结束时,会调用析构函数,因此借由类的析构函数对资源进行释放就是RAII的工作原理。

CppCon笔记--Back to Basics: RAII and the Rule of Zero

CppCon笔记--Back to Basics: RAII and the Rule of Zero

CppCon笔记--Back to Basics: RAII and the Rule of Zero

但是这段代码仍然存在问题,如果对vector进行复制,此时的析构会进行double release,代码报错。这里就引入了C++的第一个rule of thumb。

当类直接对一些资源进行管理时,你需要手写三个成员函数:

  • 析构函数,释放资源

  • 拷贝函数,选择正确的拷贝方式,是否深拷贝,是否释放rhs的对象

  • 拷贝构造函数,同样是选择正确的拷贝方式

不要忘了有时候可以用swap-and-copy来处理,会更加安全。
CppCon笔记--Back to Basics: RAII and the Rule of Zero
noexcept!

CppCon笔记--Back to Basics: RAII and the Rule of Zero
比如这个例子self-assign会内存泄漏

CppCon笔记--Back to Basics: RAII and the Rule of Zero
这个例子中能self-assign,但是用成员数据赋值会出问题。

上一篇:"/home/ubuntu/py_ws/src/basics/action/Timer.action" "-o"


下一篇:神经网络的编程基础(Basics of Neural Network programming)