说我有一个整数向量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/