1. ホーム
  2. c++

[解決済み] unique_ptr::release()はデストラクタを呼び出すのか?

2023-01-15 17:51:56

質問

このコードは正しいですか?

auto v =  make_unique<int>(12);
v.release();     // is this possible?

と同じ意味ですか? delete と同じですか?

どのように解決するには?

いいえ、このコードはメモリリークを引き起こします。 release は、管理されたオブジェクトの所有権を解放するために なしで を削除することなく、管理対象オブジェクトの所有権を解放するために使用されます。

auto v = make_unique<int>(12);  // manages the object
int * raw = v.release();        // pointer to no-longer-managed object
delete raw;                     // needs manual deletion

セーフティネットなしで生メモリを扱う正当な理由がない限り、これを行うのはやめましょう。

オブジェクトを削除するには reset .

auto v = make_unique<int>(12);  // manages the object
v.reset();                      // delete the object, leaving v empty