这些什么时候会给出不同的答案,这种差异什么时候会有用呢?
答案 0 :(得分:17)
以前对平易可复制的属性的测试,用少数几个词来表示类型为memcpy
- 安全。
一个简单的可复制类是一个类:
- 没有非平凡的拷贝构造函数(12.8),
- 没有非平凡的移动构造函数(12.8),
- 没有非平凡的复制赋值运算符(13.5.3,12.8),
- 没有非平凡的移动赋值运算符(13.5.3,12.8)和
- 有一个简单的析构函数(12.4)。
一个普通的类是一个具有普通默认构造函数(12.1)并且可以轻易复制的类。
[注意:特别是,一个简单的可复制或普通的类没有虚函数 或虚拟基类。 -end note ]
后者测试是否存在普通复制构造函数,这是平易可复制的属性的要求。它基本上意味着该类型的复制构造函数执行按位复制。
如果不是用户提供的,并且如果
,则类X的复制/移动构造函数是微不足道的- 类X没有虚函数(10.3),没有虚基类(10.1)和
- 选择复制/移动每个直接基类子对象的构造函数是微不足道的,
- 对于类型(或其数组)的X的每个非静态数据成员,构造函数 选择复制/移动该成员是微不足道的;
否则复制/移动构造函数不重要。
很容易制作一种为这些特征提供不同结果的类型:
struct foo {
foo(foo const&) = default; // this is a trivial copy constructor
~foo(); // this is a non-trivial destructor
};