スマートポインタ(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型が作りたかったんだろうな。