C ++ 0x中的特殊成员函数
维基百科关于特殊成员函数的文章不包含任何移动构造函数和移动赋值运算符的引用。
我想更新条目,但我不确定0x标准是什么。
关于这两个功能的规则是什么?它们是由编译器自动生成的,如果是这样的话?
编辑:我已经更新了维基百科页面,如果有人感觉它,请通过编辑形状(如果需要)帮助社区。
没有找到相关结果
已邀请:
1 个回复
梆晨灸碾
形式 X的每个直接或虚拟基类B都有一个复制构造函数,其第一个参数类型为
或
,并且 对于类型为M(或其数组)的X的所有非静态数据成员,每个这样的类类型都有一个复制构造函数,其第一个参数的类型为
或
。 否则,隐式声明的复制构造函数将具有
形式。 如果类定义没有显式地声明一个移动构造函数,那么当且仅当如下时,将隐式声明一个默认值 X没有用户声明的复制构造函数和 移动构造函数不会被隐式定义为已删除。 [注意:当未隐式声明或显式提供移动构造函数时,否则将调用移动构造函数的表达式可能会调用复制构造函数。 - 尾注] 类X的隐式声明的移动构造函数将具有
的形式。 在隐式删除的默认函数上,§12.8/ 12: 隐式声明的复制/移动构造函数是其类的内联公共成员。如果X具有以下内容,则将类X的默认复制/移动构造函数定义为已删除(8.4.3): 具有非平凡对应构造函数的变体成员,X是类似联合的类, 类型M(或其数组)的非静态数据成员,由于应用于M的相应构造函数的重载解析(13.3),无法复制/移动,导致模糊或从默认情况下删除或无法访问的函数构造函数,或 直接或虚拟基类B无法复制/移动,因为重载解析(13.3),应用于B的相应构造函数,导致模糊或从默认构造函数中删除或无法访问的函数,或者 对于移动构造函数,一个非静态数据成员或直接或虚拟基类,其类型没有移动构造函数,并且不是简单的可复制。 §12.8/ 13-18定义了函数在隐式生成时应如何工作。 §12.8/ 19然后与§12.8/ 8做同样的事情,除了复制赋值和移动赋值运算符。它们足够相似,不值得在这里引用。 为了获得更完整的图片,您需要完整阅读这些部分,但这是一般性的想法。我很高兴我们得到隐式移动语义。 *但是像默认的复制功能一样,它们可能并不总是具有正确的行为!三巨头应该成为五巨头。 (例如,只要我们需要深层复制某些东西,就会实现三巨头。我们还需要确保我们进行“深度移动”,其中源的数据被清零/重置。这不是隐含的。)