Pour éviter ce fait, il existe plusieurs solutions (classées par ordre de préférence)
1. éviter l'utilisation de pointeur lorsque ce n'est pas nécessaire...: finalement, pourquoi ne pas, tout simplement, déclarer le membre b comme... un objet tout à fait normal ainsi, chaque instance de A aura son propre membre, et il n'y aura plus de risque de double libération
2. Si ce n'est pas possible, veiller à ce que la durée de vie du membre b ne dépende pas de l'instance de A: donner la responsabilité de la destruction du membre à une classe tierce (principe des patterns observer et mediator, par exemple),
3. (ex-aequo avec (2) )Interdire l'utilisation du constructeur par copie en le déclarant (sans le définir) dans l'accessibilité private:... il faut alors aussi prévoir de faire pareil avec l'opérateur d'affectation
4. Définir le constructeur par copie pour ta classe A, en veillant à ce que le membre b de la copie ne pointe pas sur le membre b de l'original (nécessite l'allocation dynamique d'un nouveau membre pour la copie )... Mais prévoir également de définir l'opérateur d'affectation
Dans l'ordre d'esprit du (1), il faut signaler que le problème est également présent avec les pointeur de pointeur (de pointeur (de pointeur) )
Partager