0

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このコードの後に​​ポインターがぶら下がっていますか?

4

3 に答える 3

5

あなたのコードは完全に有効です。a.release()動的に割り当てられたオブジェクトを一意のポインターから切り離すためa、整数を所有しなくなりますが、何も削除されません。

ただし、最終的に を呼び出さない限り、メモリ リークが発生しますdelete var

于 2014-08-15T13:12:19.380 に答える
2

いいえ、このコードの後varはポインターがぶら下がっていません。はい、delete明示的に呼び出さないか、さらに別のスマート ポインターを使用すると、メモリ リークが発生します。releaseスマート ポインターは、ポインターを別の場所に格納した後に明示的に呼び出すなど、手動で処理する場合、ダングリング ポインターが存在しないことを保証しません。

ところで、make_unique使用する関数は標準ではないため (ただし、次のリビジョンにあるはずです)、コードは移植できません。

于 2014-08-15T13:15:59.800 に答える
0

番号

ここに同等のものがあります

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
于 2014-08-15T13:08:25.087 に答える