- 76 名前:デフォルトの名無しさん mailto:sage [04/01/12 15:57]
- >>73
shared_ptr の コンストラクタにある、template< class Y > は、 shared_ptr< void* >( new Object() ); とかやっても きちんと Object のデストラクタを呼び出すための仕掛け。 大雑把に書くと以下のようなコード。 struct deleter_base { virtual void destroy() = 0; virtual ~deleter_base(){} }; template< class T > struct deleter : public deleter_base { deleter( T * p ) : p_(p) void destroy() { checked_delete( p_ ); } T * p_; }; struct shared_count { template< typename Y > shared_count( Y * p ) : pd_( new deleter<Y>( p ) ) ... { ... } // カウンタが 0 を示したときに pd_->destroy を呼ぶような処理 // これで、Y は正しく delete される。 deleter_base * pd_; }; みたいなの。
|

|