« 今日は日曜だけど仕事に行こう | トップページ | 公開処刑 »

スマータボインちゃん

ニコニコで、http://www.nicovideo.jp/watch/sm8099018
とか
http://www.nicovideo.jp/watch/sm3452591
とか
http://www.nicovideo.jp/watch/sm9260335
とか見てたら、何か触発されて、何か作りたくなってきた。

というわけで部品作りから。…そっからかよ。

まずはスマートポインタ。MoreEffectiveC++では「生ポインタをくるんでポインタのように扱えるもの」
とあったような気がするので、そんな感じで書いてみる


class Sample
{
 ///サンプルですが何か
};
template<class T>
class SmartPtr<T>
{
 public:
  //別にNULLって書いてもいいのよ
  SmartPtr(T* body=0) : _body(body){}
  ~SmartPtr(){
   //なんかしらの後始末
  }
  void Reset(T* body=0){
   _body = body;   
  }

  //->演算子定義。これによって、メンバ変数、メンバ関数を呼び出せる
  T* operator->()const{
   return _body;
  }
  T& operator*() const{
   return *_body;
  }
 private:
  T* _body;
  //コピーと代入
  SmartPtr(const SmartPtr& smptr);
  SmartPtr& operator=(const SmartPtr& smptr);
  void Swap(SmartPtr<T>& sm){
   T* tmp = sm._body;
   sm._body = _body;
   _body = tmp;
  }
};


ひとまずこれがスコープドポインタやシェアードポインタの元になるのよん。
で、このスマートポインタって奴をポインタのかわりに使用することはProxyパターンでもあるのよね。
こんなもん作って何が楽しいのかと言うと、上にも書いたけど、ポインタの代わりに使う。
これは値クラスなので、非ポインタとして使用することができる→ポインタを安全に使用することもできるのよね。
まぁ危険に使おうと思えばなんだってできるけど…いつ実体がなくなったのかとか全然分からない状態で使うよかマシなんじゃないだろうかとか…
素直にBoost使えよって感じですが。

次回はこれからスコープドとシェアードを作っていこうと思います。

|

« 今日は日曜だけど仕事に行こう | トップページ | 公開処刑 »

プログラミング(C++)」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: スマータボインちゃん:

« 今日は日曜だけど仕事に行こう | トップページ | 公開処刑 »