gpt4 book ai didi

c++ - 分离复制/move 赋值运算符

转载 作者:行者123 更新时间:2023-11-28 01:56:38 25 4
gpt4 key购买 nike

我在这里读过:What are move semantics? , 在二级标题下:特殊成员函数,我们应该将复制赋值运算符和 move 赋值运算符统一为一个 move\复制赋值运算符的原因,

但是如果我们希望禁止复制或 move 呢?在这种情况下,我应该在禁止的构造函数上指示“已删除”并实现另一个吗? (即两者之间的分离)。

如果是这样,正确的做法是什么?

最佳答案

如果你想创建一个可 move 但不可复制的类,你应该实现 move 构造函数并将复制构造函数标记为已删除。

copy-and-swap 模式仍然有效(更多的是 move 和交换,真的)。由于参数只能 move 构造,因此只有 move 赋值可用。

class MyClass
{
MyClass(MyClass&& other) {
// Do your move here
}
MyClass(const MyClass& other) = delete;

MyClass& operator=(MyClass other) {
// You can still use copy-and-swap (move-and-swap, really)
// Since MyClass is non-copyable, only move assignment will be available
}
};

或者您可以创建一个 move 赋值运算符 (MyClass& operator=(MyClass&& other))。如果声明 move 构造函数,默认复制赋值运算符将被隐式删除。

关于c++ - 分离复制/move 赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40968410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com