Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 禁用运算符=并复制构造函数_C++ - Fatal编程技术网

C++ 禁用运算符=并复制构造函数

C++ 禁用运算符=并复制构造函数,c++,C++,有没有办法禁用operator=和复制构造函数,并且只允许使用std::move()? 我知道我能做到 foo& operator= (const foo&) = delete; foo(const foo&) = delete; 但这也将禁用std::move 我想要的是阻止复制此类 并且只允许foo foo2=std::move(foo1) 顺便说一句,我有私人承包商。使用默认的特殊成员函数: foo(foo&&) = default; foo&am

有没有办法禁用operator=和复制构造函数,并且只允许使用
std::move()
? 我知道我能做到

foo& operator= (const foo&) = delete;
foo(const foo&) = delete;
但这也将禁用std::move

我想要的是阻止复制此类 并且只允许
foo foo2=std::move(foo1)


顺便说一句,我有私人承包商。

使用默认的
特殊成员函数:

foo(foo&&) = default;
foo& operator=(foo&&) = default;

使用默认的
特殊成员函数:

foo(foo&&) = default;
foo& operator=(foo&&) = default;

foo(foo&&)=默认值:错误默认构造函数的无效类型您还可以将其设置为私有,并仅提供声明,而不提供定义。如果您的编译器不支持c++11或
default
/
delete
功能,这只是一种解决方法。请参阅“右值引用”“默认和删除的函数”,或者更好,请注意这里的注2:
foo(foo&&)=default:错误默认构造函数的无效类型您还可以将其设置为私有,并仅提供声明,而不提供定义。仅当编译器不支持c++11或
默认
/
删除
功能时,这才是一种解决方法。请参见“右值引用”“默认和删除的函数”或更好的注释2: