Object型(2)

昨日のだと、Objectの実体をコピーしたとき、Objectの内部のデータまでコピーされるので不可。
なので、オブジェクトデータをポインタで持って、コピーしても同一のオブジェクトを表すようにします。

class ObjectData{
};

class Object{
public:
    Object(){
        _pData = smart_ptr< ObjectData >( new ObjectData );
    }
    Object( Object* p ){
        _pData = p->_pData;
        delete p;
    }
    Object( const Object& s ){
        _pData = s._pData;
    }
protected:
    smart_ptr< ObjectData > _pData;
};

class HogeData : public ObjectData{
public:
    int a[ 100 ];
};

class Hoge : public Object{
public:
    Hoge(){
        _pData = smart_ptr< ObjectData >( new HogeData );
    }
    Hoge(       Object* p ) : Object( p ){}
    Hoge( const Object& s ) : Object( s ){}
    
    void foo(){
        ((HogeData*)_pData.get())->a[ 99 ] = 10;
    }
};

やっぱりkanokeさんと同じ方法になるっぽいですね(;´Д`)