c++ - 给另一个 vector 内存的 std::vector 所有权?

标签 c++ optimization 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++ 中执行此操作的最佳方法是什么?

最佳答案

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

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
}

关于c++ - 给另一个 vector 内存的 std::vector 所有权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57209434/

相关文章:

c++ - 要求包含 <initializer_list> 的理由是什么?

c++ - 优化的 C++ 编译器如何重用函数的栈槽?

vector - 为什么 Julia 没有在函数中获取正确的数据?

r - 在两个无序字符向量之间执行非成对全对全比较 --- 相交的反面 --- 全对全 setdiff

mysql 查询优化(错误的索引?)避免文件排序

c++ - 无效使用不完整类型 'class …' STL vector

c++ - 如何缩放四元数的旋转

c++ - 如何获取windows "open with .."函数的命令行?

c++ - STL映射插入拷贝构造函数

python - 我可以向量化这个Python代码吗?