gpt4 book ai didi

c++ - 在 STL vector 的派生类中实现 move 语义

转载 作者:太空宇宙 更新时间:2023-11-04 15:35:31 27 4
gpt4 key购买 nike

我有以下继承 STL vector 的类:

class Vec : public vector<int> {

public:

Vec() : vector<int>() {}
Vec(size_t N) : vector<int>(N) {}
Vec(Vec&& v) : vector<int>(v) {}

Vec(const Vec&) = delete;
Vec& operator = (const Vec&) = delete;
};

基本上,Vec 是 STL vector 的包装器,其中禁用了 copy 构造函数和赋值。但是,看起来 move 构造函数无法通过以下方式正常运行:

Vec a(100);
Vec b(move(a))
cout << a.size() << " " << b.size(); // here I got "100 100"

我的 Vec 包装器有什么问题吗?另外,如何为我的 Vec 类实现 move 分配,以便 Vec b = a 由 move 分配?我在想象类似下面的东西,但它不起作用:(

Vec& operator = (Vec&& rhs) {
return move(*this);
}

再来一个。在实现 move 语义时,我们是否应该始终避免使用 const 关键字?任何帮助将不胜感激。

最佳答案

Vec(Vec&& v) : vector<int>{std::move(v)} // You missed a `std::move` here
{
}

Vec& operator=(Vec&& v)
{
vector<int>::operator=(std::move(v)); // Selects base class function
return *this;
}

Demo

关于c++ - 在 STL vector 的派生类中实现 move 语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34890884/

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