说我有一个整数的载体
std::vector<int16_t> samples;
是否有一种很好的方法可以禁止复制到此向量中,以便只允许移动?我知道std::move
,但是如果尝试复制,我想要像编译错误(如unique_ptr),而不是仅仅依靠程序员“做正确的事”(tm)
答案 0 :(得分:1)
如果它是类成员,那么只需将其设为私有,并且只允许以您希望的方式进行访问:
std::vector<int16_t> const & get_samples() {return samples;}
void set_samples(std::vector<int16_t> && s) {samples = std::move(s);}
否则,您无法执行特定的访问模式。
答案 1 :(得分:1)
制作一个不可复制的包装器:
#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
。