揮発性のメモ2

http://d.hatena.ne.jp/iww/

shared_ptr

letsboost::shared_ptr

#include <iostream>
#include <boost/shared_ptr.hpp>
using namespace std;

class Hoge {
  public: 
    void echo(){ cout << "HELLO" << endl; }
    virtual ~Hoge(){ cout << "BYE" << endl; }

    typedef boost::shared_ptr<Hoge> Ptr;
};


int main() {
    { 
        Hoge::Ptr a;
        a = Hoge::Ptr(new Hoge);
        a->echo(); // 普通に使える
        
        a = Hoge::Ptr(new Hoge); // 最初にnewした分の参照が無くなり、デストラクタ発動
    }
    // スコープ切れにより、デストラクタ発動
    cout << "END" << endl;
    
    return 0;
}
$ ./a.out
HELLO
BYE
BYE
END


リストに入れても使える

#include <iostream>
#include <list>
#include <boost/shared_ptr.hpp>
using namespace std;

class Hoge
{
  public:
    int number;
    Hoge(int a){ number=a; cout << "NEW:" << number << endl; }
    virtual ~Hoge(){ cout << "DELETE:" << number << endl; }

    typedef boost::shared_ptr<Hoge> Ptr;
    typedef list<Ptr> List;
};

int main()
{
    {
        Hoge::List hogelist;
        hogelist.push_back( Hoge::Ptr(new Hoge(10)) );
        hogelist.push_back( Hoge::Ptr(new Hoge(20)) );
        hogelist.push_back( Hoge::Ptr(new Hoge(30)) );
    }
    cout << "END" << endl;

    return 0;
}
$ ./a.out
NEW:10
NEW:20
NEW:30
DELETE:10
DELETE:20
DELETE:30
END