struct Data { Data( int s ) : _data( new int[ s ] ), _size( s ) {} Data( const Data &other ) : _data( new int[ other._size ] ), _size( other._size ) { std::copy( other._data, other._data + _size, _data ); } ~Data() { delete[] _data; } Data &operator=( const Data &other ) { if ( this == &other ) return *this; delete[] _data; _size = other._size; _data = new int[ _size ]; std::copy( other._data, other._data + _size, _data ); return *this; } size_t size() const { return _size; } int &operator[]( size_t i ) { return _data[ i ]; } int operator[]( size_t i ) const { return _data[ i ]; } private: int *_data; size_t _size; };