【发布时间】:2015-08-06 21:52:24
【问题描述】:
问题正如我的标题所述。
我之所以问,是因为我有一个带有默认移动构造函数的类,但尝试执行复制赋值的代码失败,说明复制赋值运算符已删除(根据 Visual Studio 2015)。
所以我检查了规则 here 中隐式声明的复制赋值运算符:
类 T 的隐式声明或默认的复制赋值运算符被定义为已删除,以下任何一项为真:
- ...
- T 有一个用户声明的移动构造函数
- T 有一个用户声明的移动赋值运算符
所以基本上我不确定默认移动构造函数是否算作用户声明。我的直觉告诉我是的,但说到标准,我总是喜欢确定,因为假设可能代价高昂。
【问题讨论】:
-
是的
-
@Praetorian 足够公平。为什么VS2015会抱怨?当我删除我的默认移动构造函数时,代码编译得很好。
-
大概您的类包含所有可复制分配的数据成员。当您删除用户声明的移动构造函数时,没有什么可以阻止复制赋值运算符的隐式声明
-
@0x499602D2 你可能需要 51540 rep ....
-
这可能会有所帮助:stackoverflow.com/q/28963577/576911