大きなベクトルを設定する関数の戻り値として auto_ptr を使用すると、関数がソース関数になります (内部の auto_ptr が作成され、const 以外の auto_ptr を返すときに所有権が渡されます)。ただし、データにアクセスするには auto_ptr を逆参照する必要があるため、この関数を STL アルゴリズムで使用することはできません。私が推測する良い例は、各ベクトルが 100 個のコンポーネントを持つサイズ N のベクトルのフィールドでしょう。N が大きい場合、関数が各 100 成分ベクトルを値または ref で返すかどうかは同じではありません。
また、この非常に基本的なコードを試すと、次のようになります。
class t
{
public:
t() { std::cout << "ctor" << std::endl; }
~t() { std::cout << "dtor" << std::endl; }
};
t valueFun()
{
return t();
}
std::auto_ptr<t> autoFun()
{
return std::auto_ptr(new t());
}
autoFun と fun 呼び出しの両方が出力されます
Ctor Dtor
そのため、return ステートメントに渡されるように作成されている自動変数を実際に見ることはできません。これは、valueFun 呼び出しに対して戻り値の最適化が設定されているということですか? この場合、valueFun は 2 つの自動オブジェクトを作成しますか?
このような大規模なデータ構造の母集団を関数で最適化するにはどうすればよいでしょうか?