にスマートポインタクラス sp が定義されてます。使い方は、
sp<Hoge> hoge = new Hoge();
のような感じで、hoge がスコープを外れると自動的にデストラクタを呼んでくれます。
sp
はリファレンスカウンタを持っているので、sp
オブジェクト間で代入処理 (operator=
) を行っても大丈夫です(代入した瞬間に delete
されてしまうことはない)。
スマートポインタとして扱えるようにするクラスは、以下のように RefBase
を継承して作成する必要があります。
これは、RefBase
が参照カウンタなどを実装しているからです。
#include <utils/RefBase.h>
class Hoge : public virtual RefBase {
public:
static sp<Hoge> self();
...
};
Hoge::Hoge() : RefBase() {}
Android.mk では libutils.so を使用する指定をしておく必要があります。
LOCAL_SHARED_LIBRARIES := \
libutils