スマートポインタ(2)

id:melpon:20050801を見てて思いついたんだけれども、

template< class T >
class Object{
public:
    smart_ptr< T > getThis(){ return _this; }
    
    void* operator new( size_t size ){
        T* p = (T*)(malloc( size ));
        setThis( smart_ptr< T >( p ) );
        return p;
    }
    void operator delete( void* ptr ){
        free( ptr );
    }
private:
    void setThis( smart_ptr< T > this_ ){
        _this = this_;
        _this.getRefObj()->dec_ref();
    }
    
    smart_ptr< T > _this;
};

というクラスを作っておいて、

class Hoge : public Object< Hoge >{
};

という形で使えば、わざわざsetThis()をする必要がなくなって便利かも。


……てゆかこんなことするぐらいだったらObject型の内部でスマートポインタを持って、operatorを定義してsmart_ptrを隠蔽した方がいいな(;´Д`)


ん、ということはこんなのはどうだろう。

template< class T >
class Base : public smart_ptr< T >{
};

class Object : public Base< Object >{
};

class Hoge : public Object{
};

class Moke : public Object{
};

んー、眠くて頭が働いてないかも。何かさっきから間違ってる気がする……。
というか、自分はさっきから何がやりたいんだ?
……とりあえず寝て起きてから考えよう(;´Д`)


追記:
きっとObject型が作りたかったんだろうな。