En C++, les fonctions malloc, calloc... et free sont remplacées avantageusement par les
opérateurs new et delete.
Si type représente la description d’un type absolument quelconque et si n représente une
expression d’un type entier (généralement long ou unsigned long), l’expression :
new type [n]
alloue l’emplacement nécessaire pour n éléments du type indiqué et fournit en résultat
un pointeur (de type type *) sur le premier élément. En cas d’échec d’allocation, il y a
déclenchement d’une exception bad_alloc (les exceptions font l’objet du chapitre 19).
L’indication n est facultative : avec new type, on obtient un emplacement pour un
élément du type indiqué, comme si l’on avait écrit new type[1].
L’expression :
delete adresse // il existe une autre syntaxe pour les tableaux d’objets
// voir chap. 9
libère un emplacement préalablement alloué par new à l’adresse indiquée. Il n’est pas
nécessaire de répéter le nombre d’éléments, du moins lorsqu’il ne s’agit pas d’objets,
même si celui-ci est différent de 1. Le cas des tableaux d’objets est examiné au chapitre
9.
Les fonctions en ligne
Une fonction en ligne (on dit aussi « développée ») est une fonction dont les
instructions sont incorporées par le compilateur (dans le module objet correspondant) à
chaque appel. Cela évite la perte de temps nécessaire à un appel usuel (changement de
contexte, copie des valeurs des arguments sur la « pile »...) ; en revanche, les
instructions en question sont générées plusieurs fois.
Les fonctions « en ligne » offrent le même intérêt que les macros, sans présenter de
risques d’effets de bord. Une fonction en ligne est nécessairement définie en même
temps qu’elle est déclarée (elle ne peut plus être compilée séparément) et son en-tête
est précédé du mot-clé inline, comme dans :
inline fct ( ...) { ..... }
116
Précédent

- 117/398

Suivant