従来のC ++では、値による関数やメソッドへの受け渡しは、ラージオブジェクトの場合は遅く、一般に不満を抱きます。代わりに、C ++プログラマーは参照を渡す傾向がありますが、これは高速ですが、所有権、特にメモリ管理(オブジェクトがヒープに割り当てられている場合)に関するあらゆる種類の複雑な質問が生じます。
これで、C ++ 11には、Rvalue参照と移動コンストラクターがあります。つまりstd::vector
、値を関数に渡したり、関数から渡したりするのが簡単な(のような)ラージオブジェクトを実装することができます。
では、これは、デフォルトでは、std::vector
やなどの型のインスタンスの値で渡す必要があることを意味しますstd::string
か?カスタムオブジェクトについてはどうですか?新しいベストプラクティスは何ですか?
const std::string&
コピーではなく取得しました。その後、最初のスレッドが終了しました...
pass by reference ... which introduces all sorts of complicated questions around ownership and especially around memory management (in the event that the object is heap-allocated)
。所有権がどのように複雑で問題があるのかわかりませんか?私は何かを逃したかもしれませんか?