閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

move semantics

関数の引数や戻り値にクラスを値渡しするときに、中のデータをコピーするのではなく移動させることでコピーのコストを削減できる、というような考え方。でいいのだろうか。うまく言葉にできません。

たとえば std::getline などは、std::string を戻り値ではなく参照型の引数として受け取って、それに値を格納するなんて直感的でないことをしていますが、これもパフォーマンスのためでしょう (たぶん) 。けれど、これも copy ではなく move するような仕組みになれば、戻り値にすることができてすっきりする……のかな? std::getline に限定して言えば、 std::string が CoW な実装になっていれば現状でもパフォーマンスには影響しなさそうな気もするのですが。

この move semantics という考え方は次期の C++ に仕様として取り込まれる (かもしれない) そうなので、ちゃんと理解しておきたいところです。

boost::move 辺りを拾ってきて読むのもいいのかな。