C++のスマートポインタの使い分けについて

C++11スマートポインタ入門

unique_ptr

  • あるメモリの所有権をもつunique_ptrがただひとつであることを保証する
  • コピー不可。ムーブのみ。
  • 生成はmake_uniqueで(C++14以降)
  • スコープが外れた時点でデストラクタが走り(デリーターを指定することもできる)、所有権が放棄され、メモリが解放される。
  • 明示的なdelete不要
  • 速い

shared_ptr

  • あるメモリの所有権を複数のshared_ptrで共有できる
  • コピーもムーブも可能。
  • 生成はmake_sharedで(C++11以降)
  • 各shared_ptrのスコープが外れた時点で各々デストラクタが走り、所有権が放棄される。ただし、すべてのshared_ptrの所有権が放棄されない限りはメモリの解放は行われない
  • 明示的なdelete不要
  • 遅い

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です