【发布时间】:2014-09-14 07:30:01
【问题描述】:
作为经验法则,我试图弄清楚何时使用移动语义以及何时使用复制构造函数和赋值运算符。您在课堂上使用的指针类型(如果有)似乎受此答案的影响,因此我已将其包括在内。
无指针 - 基于this 的回答,如果您有一个具有 int 和 string 等原始类型的 POD 类,则无需编写自定义移动或复制构造函数和运算符。
unique-ptr - 基于this 的回答,当使用移动语义时,unique_ptr 比 shared_ptr 更适合,因为资源只能有一个 unique_ptr。
shared_ptr - 同样,如果使用复制语义,shared_ptr 似乎是要走的路。对象可以有多个副本,因此拥有一个指向资源的共享指针对我来说很有意义。但是,unique_ptr 通常比 shared_ptr 更受欢迎,因此请尽量避免使用此选项。
但是:
- 什么时候应该使用移动语义?
- 什么时候应该使用复制语义?
- 我应该同时使用两者吗?
- 我是否应该使用 none 并依赖默认的复制构造函数和赋值运算符?
【问题讨论】:
标签: c++ pointers c++11 smart-pointers move-semantics