如何使用智能指针编写类

How to write a class with smart pointer?

本文关键字:指针 何使用 智能      更新时间:2023-10-16

假设我有一个类:

class State {
  std::shared_ptr<Graph> _graph;
public:
  State():_graph(new Graph){}
};

关于第三条规则,显然不需要在析构函数中释放_graph,因为它是一个智能指针。问题是,我需要为它编写复制构造函数和赋值运算符吗?

考虑以下内容:

State s1;
State s2 = s1;

第二行会发生什么?

看起来它将是s2._graph = s1._graph;,指针共享,所以我们是安全的?

默认生成的复制运算符和赋值运算符使用类成员中提供的运算符。

shared_ptr复制构造函数"共享对象的所有权"。

shared_ptr赋值运算符替换并共享。

如果这是您想要的行为,则无需显式声明复制运算符和赋值运算符。