タグ付けされた質問 「copy-and-swap」

5
コピーアンドスワップイディオムとは何ですか?
このイディオムとは何ですか?いつ使用する必要がありますか?どの問題を解決しますか?C ++ 11を使用するとイディオムは変わりますか? 多くの場所で言及されていますが、「それは何か」という単一の質問と回答はありませんでした。これは以前に言及された場所の部分的なリストです: 好きなC ++コーディングスタイルのイディオムは何ですか:コピースワップ C ++でのコンストラクターと=演算子のオーバーロードのコピー:一般的な関数は可能ですか? コピーエリクションとは何か、そしてそれがコピーアンドスワップイディオムをどのように最適化するか C ++:オブジェクトの配列を動的に割り当てる?

2
パブリックフレンドスワップメンバー機能
copy-and-swap-idiomへの美しい答えには、少し助けが必要なコードがあります。 class dumb_array { public: // ... friend void swap(dumb_array& first, dumb_array& second) // nothrow { using std::swap; swap(first.mSize, second.mSize); swap(first.mArray, second.mArray); } // ... }; そして彼はメモを追加します タイプにstd :: swapを特化し、自由関数スワップと並んでクラス内スワップを提供する必要があるという他の主張があります。しかし、これはすべて不必要です。スワップの適切な使用は、修飾されていない呼び出しによるものです。 、そして私たちの機能はADLを通じて発見されます。1つの関数が行います。 でfriend、私は「非友好的」という用語には少しだ、私は認めなければなりません。だから、私の主な質問は: 無料の関数のように見えますが、そのクラス本体の内部ですか? なぜこれはswap静的ではないのですか?明らかにメンバー変数を使用しません。 「スワップを適切に使用すれば、ADL経由でスワップが見つかります」?ADLは名前空間を検索しますよね?しかし、それはクラスの内部も調べますか?それともどこからfriend来るのですか? 副質問: C ++ 11では、をでマークする必要swapがありnoexceptますか? C ++ 11とすると、範囲のために、私は配置する必要がありますfriend iter begin()し、friend iter end()クラス内の同じように?friendここでは必要ないと思いますよね?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.