给出一个 std::vector 对另一个向量的内存的所有权?

Give a std::vector ownership of another vector's memory?

本文关键字:向量 另一个 内存 所有权 vector 一个 std      更新时间:2023-10-16

>我有一个看起来像这样的构造函数:

Thing::Thing(std::vector<uint8> & data){
    m_data = data; // m_data is also a vector<uint8>
    // do other stuff
}

但是,data拥有相当大的内存块,我希望data简单地将其交给m_data,而不是复制它,因为调用者在构造此对象后将永远不需要它。 在C++做到这一点的最佳方法是什么?

您可以使用移动分配运算符。

m_data = std::move(data);
最好将参数

类型更改为值或右值引用,以便函数的用户不会对输入参数的内容已移动感到惊讶。

Thing::Thing(std::vector<uint8>&& data){
    m_data = std::move(data);
    // do other stuff
}

鉴于此,调用函数将意识到它们需要传递右值引用,并且不会对内容的移动感到惊讶。

最好

使用 data 初始化m_data,而不是分配给它。

Thing::Thing(std::vector<uint8>&& data) : m_data(std::move(data))
{
    // do other stuff
}