【发布时间】:2016-09-09 18:07:31
【问题描述】:
我想编写一个没有任何复制和移动语义的 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 复制操作自动禁用移动构造函数和移动赋值?
【问题讨论】:
标签: c++ c++11 move-semantics