Я очень сомневаюсь.
Есть много сомнительных способов освобождения памяти, например, вы можете использовать delete
на вашем char
массива (а не delete[]
), и это, скорее всего, работать нормально. I blogged об этом (извинения за самонаводку, но это проще, чем переписывать все это).
Компилятор - это не столько проблема, как платформа. Большинство библиотек будут использовать методы распределения базовой операционной системы, что означает, что один и тот же код может вести себя по-разному на Mac против Windows против Linux. Я видел примеры этого, и каждый из них был сомнительным кодом.
Самый безопасный подход - всегда выделять и освобождать память с использованием одного и того же типа данных. Если выделения char
с и возвращает их в другой код, вы можете быть лучше предоставления конкретных выделить/DEALLOCATE методы:
SOME_STRUCT* Allocate()
{
size_t cb; // Initialised to something
return (SOME_STRUCT*)(new char[cb]);
}
void Free(SOME_STRUCT* obj)
{
delete[] (char*)obj;
}
(Перегрузка new
и delete
операторы также могут быть вариант, но мне никогда не нравилось это делать.)