このコード:
#include <vector>
std::vector<float> getstdvec() {
std::vector<float> v(4);
v[0] = 1;
v[1] = 2;
v[2] = 3;
v[3] = 4;
return v;
}
int main() {
std::vector<float> v(4);
for (int i = 0; i != 1000; ++i)
{
v = getstdvec();
}
}
ここでの私の誤った理解は、関数 getstdvec が実際に返すベクトルを割り当てる必要がないということです。これを valgrind/callgrind で実行すると、malloc への呼び出しが 1001 回あることがわかります。main の最初のベクトル宣言では 1、ループ反復ごとに 1000。
何を与える?毎回割り当てることなく、このような関数からベクトル (またはその他のオブジェクト) を返すにはどうすればよいですか?
編集:ベクトルを参照渡しするだけでよいことはわかっています。不必要な割り当てを発生させることなく、オブジェクトを返すこのような関数を作成することは可能である (さらには望ましいことである) という印象を受けました。