我想编写一个没有任何复制和移动语义的 C++ 类:我只对其构造函数和析构函数感兴趣。
我禁用了复制操作(即复制构造函数和复制赋值运算符)明确地使用 C++11=delete
语法,例如:
class MyClass
{
public:
MyClass() { /* Init something */ }
~MyClass() { /* Cleanup something */ }
// Disable copy
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
};
作为测试,我尝试打电话std::move()
在类实例上,似乎没有自动生成移动操作,因为 Visual Studio 2015 C++ 编译器会发出错误消息。
这是 MSVC 2015 特有的行为,还是由 C++ 标准规定的通过禁用=delete
复制操作自动地禁用移动构造函数和移动赋值?
MSVC 在这种情况下符合标准。 C++14 中的 [class.copy]/9 内容如下:
如果定义一个类X
没有显式声明移动构造函数,将隐式声明一个
默认当且仅当
-
X
没有用户声明的复制构造函数,
-
X
没有用户声明的复制赋值运算符,
-
X
没有用户声明的移动赋值运算符,并且
-
X
没有用户声明的析构函数。
所以你的班级有no移动构造函数,任何移动它的尝试都将回退到已删除的复制构造函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)