このサイトは「所有権、ソース、およびシンク」について述べています:
「をコピーするauto_ptr
と、ソースauto_ptr
からターゲットに所有権が自動的に移りますauto_ptr
。ターゲットauto_ptr
がすでにオブジェクトを所有している場合、そのオブジェクトは最初に解放されます。コピー後、ターゲットのみがauto_ptr
ポインタを所有し、やがてそれを削除します。ソースはnull状態に戻され、所有されているオブジェクトを参照するために使用できなくなります。」
ここで、StroustrupのC++プログラミング言語第3版operator=()
の368ページの第14章のの定義について考えてみましょう。templacte<classX> class auto_ptr
auto_ptr& operator=(auto_ptr& a) throw() { ptr = a.ptr; a.ptr = 0; }
ptr
万が一の場合に備えて、演算子が。でアドレス指定されたオブジェクトを解放しているのがわかりませんptr != 0
。