3.3.10. pfi::lang::scoped_ptr

3.3.10.1. 概要

コピーできないauto_ptrのようなもの。

shared_ptrのコピーセマンティクスが必要ない場面ではscoped_ptrを使うべきである。 scoped_ptrは空間のオーバーヘッドは0で利用でき、 インライン化によって時間のオーバーヘッドも恐らくない。 shared_ptrは、ポインタ一つにつきポインタ一つ分のオーバーヘッド、 さらに、非参照オブジェクト1つにつきポインタ一つ分のオーバーヘッドがかかる。

3.3.10.2. 使い方

変数として使ったり、

void foo(){
  scoped_ptr<string> p(new string("hoge"));
  ...
  // 解放される
}

クラスのメンバとして使ったり

class Hoge{
public:
   Hoge(): p(new string("hoge")) {}
private:
   scoped_ptr<string> p;
};

参照を取得

*p

ポインタを取得

p.get()

ポインタ風にメンバにアクセス

p->hoge

boolへの暗黙の変換は持たない。

if (!p) // compile error!

というのも、scoped_ptrにNULLを入れることは許されていないので、 この式が意味を持たないからである。