C++ コード:
unique_ptr<int> a = make_unique<int>(159);
auto var = a.get(); // Edited a => a.get() sorry
a.release();
std::cout<<*var<<std::endl; // prints "159"
var
このコードの後にポインターがぶら下がっていますか?
C++ コード:
unique_ptr<int> a = make_unique<int>(159);
auto var = a.get(); // Edited a => a.get() sorry
a.release();
std::cout<<*var<<std::endl; // prints "159"
var
このコードの後にポインターがぶら下がっていますか?
あなたのコードは完全に有効です。a.release()
動的に割り当てられたオブジェクトを一意のポインターから切り離すためa
、整数を所有しなくなりますが、何も削除されません。
ただし、最終的に を呼び出さない限り、メモリ リークが発生しますdelete var
。
いいえ、このコードの後var
はポインターがぶら下がっていません。はい、delete
明示的に呼び出さないか、さらに別のスマート ポインターを使用すると、メモリ リークが発生します。release
スマート ポインターは、ポインターを別の場所に格納した後に明示的に呼び出すなど、手動で処理する場合、ダングリング ポインターが存在しないことを保証しません。
ところで、make_unique
使用する関数は標準ではないため (ただし、次のリビジョンにあるはずです)、コードは移植できません。
番号
ここに同等のものがあります
unique_ptr<int> a = make_unique<int>(159);
auto var = a.release(); // returns contained pointer and sets a to be empty
std::cout<<*var<<std::endl; // var is still valid here, though you should delete it after