为我自己实现移动语义 std::vector

Implement move semantics for my own std::vector

如何在给定内部字段数据、大小和容量的情况下为 std::vector 实施移动示意图? 我怎样才能使这个线程安全?

#include <utility>

class vec {
public: 
    vec(vec&& o) : size(o.size), capacity(o.capacity), data(std::move(o.data))
    {}

    vec& operator=(vec&& o)
    {
        if (this != &o) {
            size = o.size;
            capacity = o.capacity;
            delete[] data;
            data = o.data;
            o.data = nullptr;
        }
        return *this;
    }

    vec(vec&) = delete;                         // disable copying
    vec& operator=(vec&) = delete;  
    vec& operator=(vec&) const = delete;

    int* data;
    size_t size;
    size_t capacity;
};

几点:

  • 我认为您不会在原始指针上使用 std::move。你只会 使用 data = o.data 分配指针,然后手动将旧指针设置为空 o.data = nullptr
  • 根据定义,如果你正在移动一个对象,你就假设没有其他线程会使用你正在移动的对象,否则你不应该移动它,因此你不会在移动赋值运算符,您将确保其余代码中的线程安全。