C++编程很多时候需要手动管理资源,其中包括资源的获取,使用和释放,而手动对资源释放是很容易出错的一个环节。
根据C++的特性,当局部对象的生命周期结束时,会调用析构函数,因此借由类的析构函数对资源进行释放就是RAII的工作原理。
但是这段代码仍然存在问题,如果对vector进行复制,此时的析构会进行double release,代码报错。这里就引入了C++的第一个rule of thumb。
当类直接对一些资源进行管理时,你需要手写三个成员函数:
-
析构函数,释放资源
-
拷贝函数,选择正确的拷贝方式,是否深拷贝,是否释放rhs的对象
-
拷贝构造函数,同样是选择正确的拷贝方式
不要忘了有时候可以用swap-and-copy来处理,会更加安全。
noexcept!
比如这个例子self-assign会内存泄漏
这个例子中能self-assign,但是用成员数据赋值会出问题。