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 > の違いを意識しなくていい。
これはいいかも(*´ω`)