J'en doute fortement.
Il y a beaucoup de façons douteuses de libérer de la mémoire, par exemple, vous pouvez utiliser delete
sur votre tableau char
(plutôt que delete[]
) et il fonctionnera probablement très bien. I blogged en détail à ce sujet (des excuses pour l'auto-lien, mais c'est plus facile que de tout réécrire).
Le compilateur n'est pas tellement le problème que la plate-forme. La plupart des bibliothèques utilisent les méthodes d'allocation du système d'exploitation sous-jacent, ce qui signifie que le même code peut se comporter différemment sur Mac par rapport à Windows par rapport à Linux. J'ai vu des exemples de cela et chacun d'eux était un code discutable.
L'approche la plus sûre consiste à toujours allouer et libérer de la mémoire en utilisant le même type de données. Si vous allouez char
s et de les retourner à tout autre code, vous pouvez être mieux fournir des méthodes spécifiques allouer/désallouer:
SOME_STRUCT* Allocate()
{
size_t cb; // Initialised to something
return (SOME_STRUCT*)(new char[cb]);
}
void Free(SOME_STRUCT* obj)
{
delete[] (char*)obj;
}
(Surcharger les opérateurs new
et delete
peut également être une option, mais je n'ai jamais aimé faire cela.)