c++ - 赋予另一个向量内存的 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++ 中执行此操作的最佳方法是什么?
解决方案
您可以使用移动赋值运算符。
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
}
推荐阅读
- reactjs - React Native 应用程序中出现奇怪的 ReferenceError
- angular - Map Observable of Array using Observable
- c# - 如何根据 oledb 命令中的当前月份获取月份?
- c# - Getting error parsing ProtoBuf data
- javascript - jQuery - removeClass() applied to all classes except one
- typescript - TypeScript type with properties of an object containing a specific type
- oop - Create parent/child relationship in class
- d3.js - 如何对 d3 折线图使用 enter(数据连接)
- python - 断言混合的 native 和 numpy 类型是相等的
- python - 如何在文本分析中查看关键字的一致性