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