gpt4 book ai didi

c++ - 当基类提供时,派生类是否需要实现移动语义?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:40 25 4
gpt4 key购买 nike

我看完了Thomas Becker's "C++ Rvalue References" .我有几个关于右值和右值引用的问题。

假设我有一个简单的数组类:

template <class T>
MyArray
{
...
T* m_ptr; // Pointer to elements
size_t m_count; // Count of elements
};

进一步假设它提供:

#if(__cplusplus >= 201103L)
MyArray(MyArray&& t)
: m_ptr(std::move(t.m_ptr)), m_count(std::move(t.m_count))
{
t.m_ptr = NULL;
t.m_count = 0;
}
MyArray operator=(MyArray&& t)
{
std::swap(*this, t);
return *this;
}
#endif

现在,假设我有一个派生类添加新的数据成员:

MyImprovedArray : public MyArray
{
...
};

MyImprovedArray 需要什么?

它是否还需要 MyImprovedArray(MyImprovedArray&&)MyImprovedArray& operator=(MyImprovedArray&&)?如果是,是否只需要执行基类std::move?或者它是否也需要执行 std::swap

MyImprovedArray(MyImprovedArray&& t)
: MyArray(t)
{
}

最佳答案

Rule of five (或零)适用于派生类,无论基类定义什么。

如果派生的 MyImprovedArray 的移动构造函数不会做任何特殊的事情,请不要定义它,让编译器生成一个。

关于c++ - 当基类提供时,派生类是否需要实现移动语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31755703/

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