2007-01-05から1日間の記事一覧

変だな

weak_ptrも実はlong型のカウンタをインクリメントまたはデクリメントする方式のように見える。 weak_count(weak_count const & r): pi_(r.pi_) // nothrow #if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) , id_(shared_count_id) #endif { if(pi_ != 0) pi_->wea…

weak_count

weak_ptrの鍵を握っているのはたぶんこのweak_countだろう。 class weak_count { private: sp_counted_base * pi_; #if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) int id_; #endif friend class shared_count; public: weak_count(): pi_(0) // nothrow #if def…

ついでなんでweak_ptrの実装もみてみよう

weak_ptrのソースはこうなっているようだ。 #ifndef BOOST_WEAK_PTR_HPP_INCLUDED #define BOOST_WEAK_PTR_HPP_INCLUDED // // weak_ptr.hpp // // Copyright (c) 2001, 2002, 2003 Peter Dimov // // Distributed under the Boost Software License, Versio…

shared_ptrのカラクリ

shared_ptrの動作を追ってみる。 shared_ptrを理解する足しになるかもしれん。 boost::shared_ptr<string> s = boost::shared_ptr<string>(new string("hello")); とやったら、中で何が起こっているんだろ。 template<class Y> explicit shared_ptr( Y * p ): px( p ), pn( p ) // Y m</class></string></string>…

仮面武闘会

誰でもいいんだよ相手の正体がなんであっても。 Special Forceの世界はまるで仮面舞踏会のようだ。 相手のリアルの肩書きや所属は関係がない。関係があるのはSpecial Forceの世界での戦歴と腕前だけだ。 実世界のことなんかどうでもいい。 相手がほんとうは…

熱い、熱すぎる一戦

ヤケドするような真っ赤に燃える一戦ってのがある。 頭に血が上って体中がカッカと火照ってくるような、激しい焦りと緊張とスリルと冷や汗の一戦がある。 チームが一丸となり、ひとつの作戦を決行するとき、俺たちはひとりの人間からひとつの群れへと生まれ…

Marilyn Manson

とりあえずweak_ptrの関連部位について

if(pe != 0) pe->_internal_weak_this._internal_assign(const_cast<Y*>(px), pn); weak_ptrの_internal_assign()というメソッドが呼ばれている。これが何をやってるのか知りたければ、weak_ptrの実装もみてみなきゃなるまい。 そんなわけで_internal_assign()の</y*>…

enable_shared_from_this.hpp

enable_shared_from_this()はmutableがついたweak_ptrを持ってる。 mutableってのは何だと思ったが、値を変更できないconstメンバ関数の中でも変更できる変数を宣言したいときにつけるんだそうだ。 変数がクラス宣言の末尾に来ているのは、普通とは違い外部…

shared_ptrとweak_ptrを比較してみる

template<class Y> weak_ptr(weak_ptr<Y> const & r): pn(r.pn) // never throws { px = r.lock().get(); } template<class Y> weak_ptr(shared_ptr<Y> const & r): px(r.px), pn(r.pn) // never throws { } template<class Y> explicit shared_ptr( Y * p ): px( p ), pn( p ) // Y must be c</class></y></class></y></class>…

shared ptr

shared_ptr(): px(0), pn() // never throws in 1.30+ { } template<class Y> explicit shared_ptr( Y * p ): px( p ), pn( p ) // Y must be complete { detail::sp_enable_shared_from_this( pn, p, p ); } // // Requirements: D's copy constructor must not thro</class>…