【发布时间】:2020-02-26 07:22:51
【问题描述】:
我是智能指针的新手,我喜欢将它们用于共享对象的安全性和强大功能...
我有一个问题:如果我的类在其构造函数和析构函数中管理资源,应用一些经验法则,如 Big 5 和 Big 3……我还应该使用智能指针吗?或者我的班级是他们的替代品。因为正如我在 C++ 入门 5 版中所读到的,智能指针可以解决原始指针面临的问题,例如内存泄漏、双重删除指针和访问悬空指针……我的班级可以避免这些问题:
class BallGame {
public:
using Resource = int;
BallGame(int);
BallGame(const BallGame&);
BallGame(BallGame&&);
BallGame& operator=(const BallGame&);
BallGame& operator=(BallGame&&);
~BallGame();
private:
Resource m_res;
};
考虑到我班级的成员正在做正确的工作,所以我可以避免使用智能指针吗?
我想知道一些情况下我应该使用智能指针而不是在我的类中管理资源。
它们真的像 C++ 入门书中那样用于“愚蠢的类”(定义构造函数但没有表现良好的析构函数的类)吗?
【问题讨论】:
-
大部分资源都可以通过智能指针和自定义删除器来处理,避免编写自定义类来处理它们(或者是一种实现方式)。
-
为什么在可以有 0 规则时使用 3/5 规则 :)
标签: c++ c++11 smart-pointers