如果我的班级正确地管理资源,那么拥有聪明的poointers有什么意义呢?

Ita*_*iwa 3 c++ smart-pointers c++11

我是智能指针的新手,我喜欢将它们用于共享对象的安全性和强大功能...

我有一个问题:如果我的班级使用一些经验法则(例如Big 5和Big 3)在其构造函数和析构函数中管理资源,那么我是否仍应使用智能指针?否则我的课可以代替他们。因为正如我在C ++ Primer 5 Edition中所读到的那样,智能指针解决了原始指针所面临的问题,例如内存泄漏,双删除指针和访问悬空指针……我的课程可以避免这些问题:

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;
};
Run Code Online (Sandbox Code Playgroud)
  • 考虑到班级成员做的正确,所以可以避免使用智能指针吗?

  • 我想知道某些情况下应该使用智能指针而不是在课堂上管理资源。

  • 它们是否真的像C ++入门书中所述的“哑类”(定义构造函数但行为不佳的析构函数的类)。

Jac*_*ack 5

您的问题可以理解为

如果我在使用的每个类中为智能指针的内存所有权实现了正确的语义,是否可以避免使用智能指针?

是的,但是为什么呢?当您需要动态数组时,是否std::vector每次需要都手动重新实现基本语义?我不这么认为。

这是库的目的,避免每次都重新发明轮子。

  • 您可以将`std :: unique_ptr <Foo>`作为数据成员,我看不出有什么区别。 (3认同)