T* copy(T* array, int len, int newlen)
{
T* ret = new T[newlen];
if( ret != NULL )
{
int size = (len < newlen) ? len : newlen;
for(int i=0; i<size; i++)
{
ret[i] = array[i];
}
}
return ret;
}
void update(T* array, int length)
{
if( array != NULL )
{
T* temp = this->m_array;
this->m_array = array;
this->m_length = length;
delete[] temp;
}
else
{
THROW_EXCEPTION(NoEnoughMemoryException, "No Memory to update DynamicArray object ...");
}
}
优化之前:赋值操作符的重载函数
第一步:
DynamicArray<T>& operator= (const DynamicArray<T>& obj)
{
if( this != &obj )
{
T* array = new T[obj.m_length];
if( array != NULL )
{
for(int i=0; i<obj.m_length; i++ )
{
array[i] = obj.m_array[i];
}
T* temp = this->m_array;
this->m_array = array;
this->m_length = obj.m_length;
delete[] temp;
}
else
{
THROW_EXCEPTION(NoEnoughMemoryException, "No Memory to creat DynamicArray object ...");
}
}
return *this;
}
第二步:
DynamicArray<T>& operator= (const DynamicArray<T>& obj)
{
if( this != &obj )
{
T* array = copy(obj.m_array, obj.m_length, obj.m_length);
update(array, obj.m_length);
}
return *this;
}
第三步:
DynamicArray<T>& operator= (const DynamicArray<T>& obj)
{
if( this != &obj )
{
update(copy(obj.m_array, obj.m_length, obj.m_length), obj.m_length);
}
return *this;
}