パブリックフレンドスワップメンバー機能
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ここでは必要ないと思いますよね?