の特殊化std::swap
はオプションになりましたが、非推奨ではありません。理由はパフォーマンスです。
コードのプロトタイピングの場合、そしておそらく多くの出荷コードの場合でも、std::swap
十分に高速です。ただし、コードを少しずつ調べなければならない状況にある場合でも、カスタム スワップを作成すると、パフォーマンスが大幅に向上する可能性があります。
クラスが本質的に 1 つの所有ポインターを持ち、ムーブ コンストラクターとムーブ代入がその 1 つのポインターを処理する必要がある場合を考えてみましょう。各メンバーのマシンのロードとストアをカウントします。
コンストラクターの移動: 1 つのロードと 2 つのストア。
移動の割り当て: 2 つのロードと 2 つのストア。
カスタム スワップ: 2 つのロードと 2 つのストア。
std::swap
1 回の建設と 2 回の移動割り当て、または 5 回のロードと 6 回のストアです。
カスタム スワップは、潜在的に .NET よりも 2 倍または 3 倍高速ですstd::swap
。ロードとストアをカウントして何かの速度を把握しようとするときはいつでも、どちらも非常に高速になります。
std::swap
注: 移動割り当てのコストを計算する際には、(アルゴリズムで) 移動元の値に移動することを考慮してください。これにより、多くの場合、ブランチのコストがかかりますが、解放のコストがなくなります。