fonction renvoyant des pointeurs

fonction renvoyant des pointeurs

by Léon Burkhardt -
Number of replies: 1

Bonjour,

J'ai une question de compréhension générale:

Dans le cas d'une méthode/fonction renvoyant un pointeur dont la définition serait de la forme (où T est une classe ou un type):

T* fonction(){
T* retour = nullptr;
//[...]
return retour;
}

Si on faisait quelquechose comme:

T* ptr = fonction();

Est-ce que ptr serait ou serait une copie de retour? Dans le cas d'une copie devrait-on delete retour dans le corps de la fonction??

merci pour votre aide

In reply to Léon Burkhardt

Re: fonction renvoyant des pointeurs

by Raffaele Ancarola -

Un pointeur, si il est bien construit par l'operateur new alors

il pointe vers une allocation en memoire. Le pointeur est interprétable comme un nombre entier qui corréspond à l'addresse en memoire de son allocation.

Une allocation peut être référencée par plusieurs pointeurs, donc il faut faire attention à l'éxistence et à la largeur de cette dérnière lorsque on accède.

Si un pointeur est simplement copié ou obtenu comme retour par une fonction, comme dans ton exemple,

alors seulement l'addresse est copié laissant l'allocation invariée.

Donc, pour chaque new, l'operation delete devrait être appellée qu'une seule fois parce qu'elle élimine l'allocation. En l'appellant une deuxième fois, ça va entrainer un segmentation fault.

Remanrque sur ton exemple: retourner un nullptr est comme retourner zero. Il ne pointe vers aucune allocation, donc c'est un cas triviale qui ne nécéssite même pas de delete.