如果你是一个资源管理类的作者,那么一定会面对一个问题,RAII在被赋值的时候会发生什么?
有四种解决方案供你选择。
1.禁止拷贝
就像lock_gurad,管理锁的一个类,他的拷贝构造是被禁止的。
2.引用计数
像shared_ptr,每次拷贝的时候引用技术+1,析构的时候-1,引用计数为0时删除对象。
3.赋值底部资源
涉及到智能指针,那拷贝的资源一定需要进行深拷贝。
4.转移资源的所有权
像unique_ptr
auto ptr = std::make_unique<int>(10); // 创建
std::unique_ptr<int> ptr2 = std::move(ptr); // 移动所有权
移动所有权之后ptr变为nullptr