Я очень сомневаюсь в этом.
Существует много сомнительных способов освобождения памяти, например, вы можете использовать delete
в массиве char
(вместо delete[]
), и он, вероятно, будет работать нормально. Я подробно написал об этом в блоге (извиняюсь за собственную ссылку, но это проще, чем переписать все это).
Компилятор не столько проблема, сколько платформа. Большинство библиотек будут использовать методы выделения базовой операционной системы, что означает, что один и тот же код может вести себя по-разному на Mac по сравнению с Windows и Linux. Я видел примеры этого, и каждый из них был сомнительным кодом.
Самый безопасный подход - всегда выделять и освобождать память, используя один и тот же тип данных. Если вы выделяете char
s и возвращаете их в другой код, вам может быть лучше предоставить специальные методы выделения / освобождения:
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
также может быть вариантом, но мне никогда не нравилось это делать.)