1

関数から無効な余分なコピーにベクトルを適切に返すにはどうすればよいですか?

ベクトルのみを返す場合は、関数でベクトルを作成する必要があり、戻り時に結果にコピーされます。でもそれは避けたい。次に、ヒープ上にベクトルを作成し、そのベクトルへのポインターを返す必要があると思います vector* ?

ありがとう

4

2 に答える 2

2

C++ 標準では、コンパイラは特定の状況でこのコピーを削除できます (セクション 12.8.5)。コンパイラが実際にこれを行うかどうかを判断するのは難しいため、そのドキュメントを読むか、生成されたアセンブラ コードを確認する必要があります。したがって、コンパイラに最適化を行わせる方がよいでしょう。

しかし、手動で最適化するのが本当に好きなら (そうすべきではありません)、読み進めてください。

ヒープにベクトルを割り当てて、それへのポインターを返すことは、悪いことです。なぜなら、この場合、誰がこのオブジェクトを担当し、誰がメモリ クリーンアップを行うのかが明確でないためです。

関数に追加の引数 (結果を格納するためのベクトルへの参照またはポインター) を持たせることは、はるかに優れています。

于 2013-06-03T07:54:14.863 に答える
1

それへの参照をパラメーターとして渡します。

void foo(std::vector& bas)
{
// do code here
}
于 2013-06-03T07:51:44.243 に答える