Mais sinon c'est tout à fait possible d'écrire ses propres "smart pointers" ou autres outils de gestion de la mémoire, car il n'y a pas besoin de modifier le compilateur pour ça.
{
char* dynAlloc = malloc(1234);
MemoryDeleter deleter(dynAlloc);
} // La mémoire est libérée avec free() dès qu'on sort de ce bloc
Ça s'utilise très bien avec gcc 2.95.3 (encore utilisé dans Haiku pour la compatibilité avec BeOS). Cette version de gcc est trop ancienne pour implémenter complètement C++98. Donc je pense que n'importe quel compilateur C++ des 25 dernières années ne devrait pas avoir trop de problèmes avec ce code. Ou au pire on peut en écrire une version qui ne nécessite pas de templates, si vraiment on veut utiliser un compilateur datant de la préhistoire :)
[^] # Re: Aujourd'hui j'ai appris
Posté par pulkomandy (site web personnel, Mastodon) . En réponse au lien Comprendre la taille de la stack des threads, et comment Alpine Linux diffère des autres systèmes. Évalué à 3. Dernière modification le 29 juin 2021 à 13:38.
En C++98 il y avait auto_ptr: https://en.cppreference.com/w/cpp/memory/auto_ptr
Mais sinon c'est tout à fait possible d'écrire ses propres "smart pointers" ou autres outils de gestion de la mémoire, car il n'y a pas besoin de modifier le compilateur pour ça.
Par exemple dans Haiku on a ceci:
https://git.haiku-os.org/haiku/tree/headers/private/shared/AutoDeleter.h#n151
Qui s'utilise comme cela:
Ça s'utilise très bien avec gcc 2.95.3 (encore utilisé dans Haiku pour la compatibilité avec BeOS). Cette version de gcc est trop ancienne pour implémenter complètement C++98. Donc je pense que n'importe quel compilateur C++ des 25 dernières années ne devrait pas avoir trop de problèmes avec ce code. Ou au pire on peut en écrire une version qui ne nécessite pas de templates, si vraiment on veut utiliser un compilateur datant de la préhistoire :)