boost::shared_ptr が素敵な件

物凄い今更ですが、まともに使ったことってあんまりなかったりするので……。どうも生ポインタと比較した時のコストが気になってしまうんですが、まあたまには富豪的にいってみようということで使ってみました。

#include 
#include 
#include 
#include 
#include 
using namespace std;

struct base { virtual void print() = 0; };
struct hoge : public base {
    virtual void print() { cout << "hoge" << endl; }
};
struct hige : public base {
    virtual void print() { cout << "hige" << endl; }
};
typedef boost::shared_ptr<base> basePtr;
typedef std::vector Array;

int main(int, char*[])
{
    Array arr; {
        basePtr b(new hoge());
        arr.push_back(b);
        b.reset(new hige());
        arr.push_back(b);
        b.reset(new hoge());
        arr.push_back(b);
    }
    for_each(arr.begin(), arr.end(), boost::bind(&base::print, _1));

    return 0;
}

書きながらこれ普通にやったら通らないよなーと思いつつコンパイル、実行して普通に思い通りに動いた時に、ああ、 boost ってすごいな、と。ドキュメントちゃんと読んでいれば自明なことなんですけどね。