【发布时间】:2014-11-14 05:11:16
【问题描述】:
对于隐式删除复制/移动构造函数的情况有一个规则:
隐式声明的复制/移动构造函数是内联公共 其类的成员。类 X 的默认复制/移动构造函数 如果 X 有,则定义为已删除 (8.4.3):
[...]
——任何直接或虚拟基类或类型的非静态数据成员 带有从默认值中删除或无法访问的析构函数 构造函数,或
[...]
因为我找不到反映规则的示例,所以我不清楚。考虑以下代码:
struct A
{
~A() = delete;
};
struct B : A
{
A a;
B(){ }; //error error: attempt to use a deleted function B(){ };
B(const B&&) = delete;
};
B *b = new B;
int main() { }
由于删除的移动构造函数不参与重载解析,我预计错误会类似于“复制构造函数被隐式删除”。但相反,我收到了关于已删除B() 的错误,这是我明确定义的。您不能提供一个反映该规则的示例吗?
【问题讨论】:
-
“已删除的移动构造函数不参与重载决议” - 仅适用于定义为已删除的默认移动构造函数。它不适用于显式删除的移动构造函数。
标签: c++