Object型

id:kanoke:20051101を参考にして、Object型を作ろうとごちゃごちゃやってると、こんな感じになりました。

class Object : public smart_ptr< Object >{
public:
    Object(){}
    Object( Object* p ) : smart_ptr< Object >( p ){}
    Object( Object& s ) : smart_ptr< Object >( s ){}
};

class Hoge : public Object{
public:
    Hoge(){}
    Hoge( Object* p ) : Object( p ){}
    Hoge( Object& s ) : Object( s ){}
    
    void foo(){}
};

これ、こんなことをやっても正常に動作しました。

Hoge hoge = new Hoge();
Object obj = (Object)(new Hoge( (Object)(new Hoge( hoge )) ));
((Hoge)((Object)((Hoge)obj))).foo();

newをして取得したポインタをオブジェクトで受け取ってる時点でありえねぇ!とか思ってしまいますね。


C++ってすげぇ……(;´Д`)


追記:
てかこれって設計に重大な問題があるじゃん(;´Д`)
最近ボケまくりだな……orz