gpt4 book ai didi

c++ - 基本移动分配运算符的调用顺序

转载 作者:行者123 更新时间:2023-12-02 10:19:28 24 4
gpt4 key购买 nike

在派生类中,作为返回的第一个语句或最后一个语句,从派生类中调用基类移动赋值运算符的正确位置是什么?

我在Base和Derived中有成员,这些成员需要作为移动分配运算符的一部分移动。

Class Base {
// Members goes here

public:
Base &operator=(Base &&o) {
// move all the members specific to the class here
return *this;
}
};

class Derived {
// Members goes here

public:
Derived &operator=(Derived &&o) {
// Is this correct? Base class move here or below?
Base::operator=(std::move(o)); // Is this the correct place??

// move all the members specific to the class here

// The assumption is that once we use move we cannot use the variable.
// So, should I have base class move call here?
// Base::operator(std::move(o)); // Or is this the correct place??
return *this;
}
};

最佳答案

无论哪种方式都适合您的语义。
通常,使用默认移动分配是正确的:

Derived &operator=(Derived &&o) = default;

默认实现将从base开始。

但是,如果您自己定义移动,则可能有一个原因,并且这个原因可能会指示不同的顺序。

甚至可能根本不需要打基础,而做一些完全不同的事情。例如,这种需求可能来自所需的异常安全保证。

关于c++ - 基本移动分配运算符的调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60870181/

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