揮発性のメモ2

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

shared_ptrを返す

http://d.hatena.ne.jp/iww/20120705/shared_ptr から改造してみる

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

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

    static shared_ptr<Hoge> create()
    {
        return shared_ptr<Hoge>(new Hoge);
    }
};

int main() {
    // スコープに入る
    { 
        shared_ptr<Hoge> a;

        a = Hoge::create();
        a->echo(); // 普通に使える
        
        a = Hoge::create(); // 最初にnewした分の参照が無くなり、デストラクタ発動
    }
    // スコープ切れにより、デストラクタ発動
    cout << "END" << endl;
    
//  Hoge *b = new Hoge(); ←コンパイルエラーにする
    return 0;
}

スマートポインタって返してもいいのかな。よくわからん。Effective C++に書いてあるのかな。

TR1 の仕様では触れられていませんが、通常、スレッドセーフにするために、これらのコンストラクタは内部で排他制御が行われます。結果として、通常のポインタに比べて、shared_ptr のコピーは非常にコストが大きいものとなります。

3.1 shared_ptr | 株式会社きじねこ

やっぱり良くなさそうな感じ。