9

スマートポインタの使い方を学び、所有権を理解しようとしています。を値で関数に渡すauto_ptrと、関数はそのポインターの排他的所有権を取得します。したがって、関数が終了すると、渡したポインターが削除されます。

ただし、を使用してこれを実行しようとすると、 sのunique_ptrコピー割り当てが無効になっているかのように、コンパイルエラーが発生しますunique_ptr。参照によってを渡すunique_ptrことは所有権を譲渡するようには見えません、それは単に関数にへの参照を与えるだけunique_ptrです。

auto_ptrsで動作するように関数に所有権を渡すことで、の動作を取得するにはどうすればよいunique_ptrですか?に関する詳細なチュートリアルへのリンクをいただければ幸いunique_ptrです。これまでのところ、私が読んだものは、Boostで利用可能なスマートポインターについてのみ話しているか、話しているようであり、それをカバーしているためauto_ptr無視しているようです。unique_ptrshared_ptr

4

1 に答える 1

14

ただし、unique_ptrでこれを実行しようとすると、unique_ptrsのコピー割り当てが無効になっているかのように、コンパイルエラーが発生します。

です。unique_ptr所有者は1人だけです。所有者が2人になるため、コピーできません。値で別の関数に渡すには、元の所有者がを使用して所有権を放棄する必要がありstd::moveます。

を使用するには、移動のセマンティクスunique_ptrを理解する必要があります。

auto_ptrこれは、実際には機能しない真の移動セマンティクスへのハッキーな近似です。このクラスがこれまでに存在したことを単に忘れるのが最善です。

于 2012-07-16T00:31:43.543 に答える