<分区>
我有一个看起来像这样的构造函数:
Thing::Thing(std::vector<uint8> & data){
m_data = data; // m_data is also a vector<uint8>
// do other stuff
}
但是,data
拥有相当大的内存块,我希望 data
不复制它,而是简单地把它交给 m_data
,因为调用者在构造此对象后将永远不需要它。在 C++ 中执行此操作的最佳方法是什么?
<分区>
我有一个看起来像这样的构造函数:
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/