0

ベクターとそのデータの所有権を渡したり譲渡したりする最良の方法は何ですか?

理想的な世界では、次のように機能します。

std::vector<int>& SpitAVector(int input)
{
    std::vector<int> result;
    result.push_back(input);
    return result;
}

int main()
{
    std::vector<int> myvec;
    myvec = SpitAVector(60);

    std::cout << (int)myvec[0] << std::endl;  //Outputs 60      
}

ローカル変数への参照を返しているため、これは機能しません。

このベクトル出力を使用boost::unique_ptrまたは処理することは可能ですか? boost::shared_ptr(C++11 の unique_ptr は使えません!)

4

1 に答える 1

5

ベクターとそのデータの所有権を渡したり譲渡したりする最良の方法は何ですか?

ベクトルを値で返します。

C++11 以降では、(必要に応じて) 戻り値が移動されるため、データの一括コピーは確実に行われません。

過去に行き詰まっている場合は、戻り値のコピー省略の基準を満たしていることを確認してください。あなたの関数は、単一のリターンポイントで機能します。必須ではありませんが、適切なコンパイラであれば、その最適化を実行できます。

このベクトル出力を処理するために boost::unique_ptr または boost::shared_ptr を使用することは可能ですか?

はい、しかしそれは不必要に複雑になります。値で返すだけです。

于 2014-11-12T17:04:21.520 に答える