Loading lang_cpp_05_alloc...

enib_small.png LANG-CPP 05_Alloc — Allocation individuelle

Lors de la présentation des tableaux dynamiques, nous avons indiqué qu'ils répondaient à la quasi-totalité des besoins courants en matière d'allocation dynamique de mémoire.
Si des informations doivent apparaître ou disparaître selon les circonstances de l'exécution de l'application, nous devons privilégier l'usage de données de type std::vector<T> pour les mémoriser.
En effet, ces dernières utilisent automatiquement en interne l'allocation dynamique de mémoire pour adapter leur capacité aux besoins en nombre d'informations à mémoriser.
(https://en.cppreference.com/w/cpp/container/vector)

En dehors de la démarche de programmation orientée-objet, il est extrêmement rare d'avoir besoin de créer des données individuelles par allocation dynamique.
Pour des raisons d'efficacité, de maintenabilité et de robustesse du code, il faut même éviter autant que possible d'allouer dynamiquement des données individuelles.
Bien que nous découragions l'usage de ces données individuelles allouées dynamiquement, la manière de les transmettre entre les différentes parties d'un programme concerne des préoccupations similaires à celles que nous avons déjà abordées dans ce chapitre.

Il existe néanmoins des cas où l'allocation dynamique de données individuelles apparaît comme une solution naturelle car fondamentalement liée à la nature du problème traité.
Dans ceux-ci, les données constituent un arbre ou un graphe dont les nœuds et les arcs apparaissent et s'interconnectent selon des circonstances découvertes lors de l'exécution.
À titre d'illustration, nous nous appuierons ici sur une notion d'arbre simpliste servant à représenter, manipuler et évaluer des expressions arithmétiques semblables à 10.1*(5.2+3.4).
{1 #recursive } Structure de donnée récursive
{2 #new_delete } Allocation et libération explicites
{3 #unique_ptr } Libération automatique des ressources
{4 #avoid } Évitement de l'allocation dynamique individuelle

Avant d'envisager l'usage de ce que nous venons d'étudier dans cette réalisation, n'oublions pas que si des informations doivent apparaître ou disparaître selon les circonstances de l'exécution de l'application, nous devons privilégier l'usage des tableaux dynamiques std::vector<T> pour les mémoriser.
Nous éviterons donc, autant que possible, d'allouer dynamiquement des données individuelles.

Si les spécificités du problème abordé nous poussent malgré tout vers cette solution, nous retiendrons principalement que :
Ces notions font notamment l'objet de nombreuses recommandations sur le site https://github.com/isocpp/CppCoreGuidelines :

Code source de l'expérimentation