gpt4 book ai didi

c++ - 在 C++ 中编写移动构造函数时是否必须编写复制构造函数?

转载 作者:行者123 更新时间:2023-12-05 01:06:51 24 4
gpt4 key购买 nike

我知道五法则,如果你实现一个析构函数,你很可能还应该实现一个复制构造函数、复制赋值运算符、一个移动构造函数和一个移动赋值运算符。

但是,如果我实现了一个移动操作符,我是否绝对必须实现一个复制对应物,或者它只是最佳实践?

最佳答案

“零规则”可能适用于您的情况。为什么首先提供移动构造函数或移动赋值运算符?是因为你的类代表了某些资源的唯一所有权吗?如果是这样,最好将该资源的所有权封装在 unique_ptr 成员或类似的东西中。然后,您不再需要编写移动构造函数和移动赋值运算符。编译器将自动生成它们,这将移动 unique_ptr 成员并因此转移所有权。编译器还将确保该类不可复制。

好的,但是假设由于某种原因,零规则不适合您的类(class)。如果你只声明一个移动构造函数会发生什么?然后,编译器将隐式禁用您的类的复制,这意味着您的类类型的对象只能从相同类型的右值初始化,而不能从左值初始化。五法则告诉你,最好明确说明这种情况,而不是让读者去猜测编译器在做什么。因此,最佳实践(但不是必需的)将复制构造函数定义为 = delete;

关于c++ - 在 C++ 中编写移动构造函数时是否必须编写复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68353571/

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