タグ

ブックマーク / blog.cryolite.net (2)

  • 動的削除子 (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
    kgbu
    kgbu 2008/08/05
    汎用の処理を書きたくなると、MaybeとかUnknownまで引き受けなきゃならないってことなのかしら。destructorはC++のキモな部分だけに興味深い、でも自分にはまるで理解できないけど(汗
  • それ (dynamic duck typing) C++ でできるよ +α - Cry’s Diary

    http://d.hatena.ne.jp/gnarl/20080801/1217523822 元のエントリが静的なものと動的なものを比較していますので,それに対する批判としてはまったく正当なものなのでそこには異論はありません.ですが,蛇足として, static duck typing が与えられればそこから dynamic duck typing を導出することは C++ ではできるんだよにゃ,ということは指摘しておきたいのです.これは,書籍のような整理された形でまとめられていない技法を用いますので,しばしばこういう議論の中で見落とされるのですが. それ C++ でできるよ,というのはつまり,要件が「ダックタイピングだと共通の基底クラス/インタフェースがなくても統一的やりかたで『かつ動的に』メソッド呼べる」だけなら, C++ でも特に問題なく記述できる,ということです.ただし,それが簡潔

    それ (dynamic duck typing) C++ でできるよ +α - Cry’s Diary
    kgbu
    kgbu 2008/08/05
    北京duck typingって美味しいのかどうか自分にはぜんぜんわからないけれども「複雑なことはlibraryの中に閉じ込めてある」というのにはなぜか感動した。C++の使われ方として自分が想定していた方向だったから?
  • 1