如何使用智能指针编写类
How to write a class with smart pointer?
假设我有一个类:
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
赋值运算符替换并共享。
如果这是您想要的行为,则无需显式声明复制运算符和赋值运算符。
相关文章:
- 何时在引用或唯一指针上使用移动语义
- C++关于指针和使用函数将它们启动到堆的行为究竟是什么?
- 如果我在指针中使用 ++ 操作数,我的值就会出错
- 为什么我们将 [ ] 与指向数组的指针一起使用?
- 如何将数组与指针一起使用?
- 如何将 string.erase() 与指针一起使用?
- 双指针在使用 new 时不调用对象构造函数
- C++:为什么可以在没有事先使用 new 的情况下在指向结构的指针上使用 delete?
- __unaligned说明符何时与指针一起使用?
- 从 GetProcAddress 获取的函数指针在使用 stdlib 时会使程序崩溃
- 你不能在 void 指针上使用指针算法,那么 void 指针数组是如何工作的呢?
- 将指针返回使用New创建的数组数组
- shared_ptr ::重置仅与原始指针一起使用
- 为什么在取消引用的指向接口的指针上使用赋值运算符不是编译器错误
- 为什么动态演员只能与参考和指针一起使用
- 是否可以将SDL2与智能指针一起使用
- 错误 C4703 可能未初始化的局部指针变量'y'使用
- 如何将此指针与指向成员函数的指针一起使用
- 在指向矢量的智能指针上使用 push_back() 时运行时错误
- 在指针与通过参考传递指针传递指针上使用Reference_wrapper有好处吗?