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さんと同じ方法になるっぽいですね(;´Д`)