首页 > 解决方案 > 赋予另一个向量内存的 std::vector 所有权?

问题描述

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

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

但是,data它拥有相当大的内存块,而不是复制它,我想data简单地放弃它m_data,因为调用者在构造这个对象后将永远不需要它。在 C++ 中执行此操作的最佳方法是什么?

标签: c++optimizationvector

解决方案


您可以使用移动赋值运算符。

m_data = std::move(data);

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

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

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

m_data初始化使用data而不是分配给它会更好。

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

推荐阅读