memory pool(3)
そもそも継承使うのがアホだったようです(´・ω・`)
template< class T , class M = global_memory_pool > class Memory{ public: static smart_ptr< T > create(){ void* p = M::operator new( sizeof( T ) ); if( p != null ) ::new( p ) T; return smart_ptr< T >( p , M::Deleter< T >() ); } // あとは引数有りとか配列生成とかを用意しておく };
これでいいじゃん(;´Д`)
追記:
いや待てよ……
template< class T , class M = global_memory_pool > class Memory{ public: Memory(){ void* p = M::operator new( sizeof( T ) ); if( p != null ) ::new( p ) T; _p = smart_ptr< T >( p , M::Deleter ); } template< class U > Memory( const smart_ptr< U >& p ){ _p = p; } operator smart_ptr< T >&(){ return _p; } private: smart_ptr< T > _p; };
smart_ptr< Hoge > hoge( Memory< Hoge >() ); Memory< Hoge > hoge2 = hoge;
smart_ptr< Hoge > と Memory< Hoge > の違いを意識しなくていい。
これはいいかも(*´ω`)