Re[2]: Взрывоопасная смесь new[]+memmove+delete[]
От: Vi2 Удмуртия http://www.adem.ru
Дата: 18.07.02 10:20
Оценка:
Здравствуйте Al-Ko, Вы писали:

AK>template<class TYPE>
AK>void AKVector<TYPE>::Append(long nCount /* = 1 */)
AK>    {
AK>        long nNewSize = m_nSize + nCount;
AK>        
AK>        TYPE* pNewData =  new TYPE[nNewSize];
                             ---
AK>        if(m_nSize > 0){
AK>            memmove(pNewData, m_pData, m_nSize * sizeof(TYPE));
               --------
AK>            delete [] m_pData;
               -------
AK>        }

AK>        m_nSize = nNewSize;
AK>        m_pData = pNewData;
AK>    }


Взрывоопасная смесь new[]+memmove+delete[].
И как оно только у тебя работает, особенно на двумерных массивах!
Было, допустим 10 объектов TYPE в m_pData, их скопировали ПОБАЙТНО в pNewData через memmove(), удалили деструторами в delete[] m_pData и продолжаем ими пользоваться после m_pData = pNewData.

Это будет работать более-менее с классами без деструкторов, но с деструкторами, ИМХО, вылетит напрочь.

Обычно удаляют память просто через delete (void*) m_pData, чтобы не вызывать деструкторы.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.