タグ

2010年7月12日のブックマーク (2件)

  • shared_ptrの実装1 - while( c++ );

    boostといえばスマートポインタ。 C言語からC++に移るときに最も感動したものがスマートポインタだったと思います。 スコープから抜けるときに誰からも参照されなくなったオブジェクトを自動的にdeleteしてくれるポインタクラスですね。 class Hoge{ ... }; int main() { shared_ptr< int > a( new int( 1 ) ); shared_ptr< Hoge > b( new Hoge() ); cout << *a << endl; b->...(); //適当なメソッド return 0; }//←ここでdeleteされる このように使えるスマートポインタsmart_ptrを実装してみましょう。 とりあえず、最低限必要な機能だけを。 コンストラクタで様々な型のインスタンスを格納する。 ポインタ偽装。operator*、operator->

    shared_ptrの実装1 - while( c++ );
  • 動的削除子 (dynamic deleter) - 意外と知られていない? boost::shared_ptr の側面 - Cry’s Diary

    boost::shared_ptr は動的削除子 (dynamic deleter) と呼ばれる技法に基づいて実装されています.この動的削除子という技法で重要なのは, boost::shared_ptr が最終的に呼び出す解放処理が boost::shared_ptr のテンプレート引数の型に関係なく,コンストラクタに実際に渡されたポインタの型で,かつ boost::shared_ptr のコンストラクタの呼び出しの段階で 決定する,ということです. 以下のようなコードが,動的削除子の効果が一番分かりやすい例になるでしょう. class X{ public: ~X() { std::cout << "X::~X" << std::endl; } }; class B{ public: ~B() // virtual でないことに注意!! { std::cout << "B::~B" <<

    動的削除子 (dynamic deleter) - 意外と知られていない? boost::shared_ptr の側面 - Cry’s Diary