gpt4 book ai didi

c++ - 确保以普通类型 move 标准 vector

转载 作者:行者123 更新时间:2023-11-28 02:39:03 24 4
gpt4 key购买 nike

假设我有一个整数 vector

std::vector<int16_t> samples;

有没有一种很好的方法来禁止复制到这个 vector 中,以便只允许 move ?我知道 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++ - 确保以普通类型 move 标准 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26592793/

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