私はそれを見る方法がある、我々はいくつかの右辺値参照のX持っていた場合:
T&& x = ...;
を、私たちは、パラメータとしてXを使用して、いくつかの関数を呼び出した:我々は、Fを伝えるために何らかの方法必要
f(x)
xに損害を与える可能性があるかどうか(または「xの所有権を取る」または「xを使用する最後のクライアントです」)。これを設計する
一つの方法は、すべての呼び出しを修飾するために、次のようになります。
f(yours_now(x)) // ok to damage
f(still_mine(x)) // dont damage
と修飾されていないコールを違法にします。
もう一つの方法は、一方通行のデフォルトを作るために次のようになります。
次のいずれかの私たちは、すべての利用予選同意する場合
f(yours_now(x)) // ok to damage
f(x) // dont damage
または
f(x) // ok to damage
f(still_mine(x)) // dont damage
もそうかさばるであり、我々はデフォルトで設定される必要があり一方的に、これは最高ですか?両方のケースで誤ってデフォルトを選択するコストを見てみましょう:
最初のケースではダメージは問題ありませんでしたが、間違っていました。この場合、不必要なコピーが作成されたためパフォーマンスは低下しますが、それ以外は大きな問題はありません。
2番目のケースでは、オブジェクトにダメージを与えることは問題ではありませんでしたが、誤ってそれを言っていました。これは、xが破損した状態になっているので、プログラムで論理バグを検出するのが困難になる可能性があります。
最初のケースは、その「安全な」ために選ばれたケースです。