Android フレームワークの android/frameworks/base/include/utils/RefBase.h にスマートポインタクラス 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