まくまくAndroidノート
RefBase によるスマートポインタ
2011-02-03
  • android/frameworks/base/include/utils/RefBase.h

にスマートポインタクラス sp が定義されてます。使い方は、

sp<Hoge> hoge = new Hoge();

のような感じで、hoge がスコープを外れると自動的にデストラクタを呼んでくれます。 sp はリファレンスカウンタを持っているので、sp オブジェクト間で代入処理 (operator=) を行っても大丈夫です(代入した瞬間に delete されてしまうことはない)。

スマートポインタとして扱えるようにするクラスは、以下のように RefBase を継承して作成する必要があります。 これは、RefBase が参照カウンタなどを実装しているからです。

Hoge.h

#include <utils/RefBase.h>

class Hoge : public virtual RefBase {
public:
    static sp<Hoge> self();
    ...
};

Hoge.cpp

Hoge::Hoge() : RefBase() {}

Android.mk では libutils.so を使用する指定をしておく必要があります。

Android.mk

LOCAL_SHARED_LIBRARIES := \
    libutils
2011-02-03