我正在实现一个构建 uint8_t 向量的工厂类。我希望能够在返回结果向量时利用移动语义。这似乎可行,但我不相信这是完成我想要的正确方法。
我已经看到很多关于如何将返回的自动变量视为右值并使用调用代码的移动构造函数的示例,但在我的示例中,返回的对象是一个成员。我知道如果调用者将返回值放入移动构造函数中,该成员将丢失其内容——这正是我想要的。
我写了这样的东西:
#include <cstdint>
#include <iostream>
#include <vector>
class Factory
{
public:
std::vector<uint8_t> _data;
Factory(std::size_t size) :
_data(size, 0)
{
}
void buildContent(int param)
{
// perform operations on the contents of _data
}
std::vector<uint8_t> && data()
{
return std::move(_data);
}
};
int main()
{
Factory factory(42);
factory.buildContent(1);
std::vector<uint8_t> temp(factory.data());
std::cout << "temp has " << temp.size() << " elements" << std::endl;
std::cout << "factory._data has " << factory._data.size() << " elements" << std::endl;
return 0;
}
编辑:
哦,示例代码输出以下内容:
temp has 42 elements
factory._data has 0 elements