8

このサイトは「所有権、ソース、およびシンク」について述べています:

「をコピーする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

4

1 に答える 1

4

はい、これは間違いなく後者のコードのバグです。が指すオブジェクトは、 に新しい値を代入する前に d にするptr必要があります。そうしないと、 が最初に指していたオブジェクトがリークされます。deleteptrptr

于 2012-02-20T12:01:43.347 に答える