说我有一个整数向量

std::vector<int16_t> samples;

有没有一种好的方法可以禁止复制到此向量中,从而只允许移动?我知道std::move,但是如果尝试复制,我希望有一个编译错误(例如unique_ptr),而不是仅仅依靠程序员来“做正确的事”(tm)

最佳答案

制作不可复制的包装器:

#include <vector>

template<typename T>
class   uncopyable
{
public:
  uncopyable(const uncopyable&) = delete;

  uncopyable(uncopyable&&) = default;

  uncopyable(T&& data)
    :
    data_(std::move(data))
  {
  }

public:
  uncopyable&   operator=(const uncopyable&) = delete;

  uncopyable&   operator=(uncopyable&&) = default;

  uncopyable&   operator=(T&& data)
  {
    data_ = std::move(data);
    return *this;
  }

private:
  T       data_;
};

int     main()
{
  std::vector<int>      big(10000);

  uncopyable<std::vector<int>>  uncopyable_big(std::move(big));

  std::vector<int>      other_big(10000);

  uncopyable_big = std::move(other_big);
}


如果要保证没有副本,请使用此类型代替您的vector

关于c++ - 确保在平凡类型的标准 vector 中 move ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26592793/

10-11 21:00