En écrivant un constructeur de copie pour une classe qui contient un pointeur pour une mémoire allouée de manière dynamique, j'ai une question.
Comment puis-je préciser que je veux que la valeur du pointeur du pointeur de l'objet copié à partir de l'objet à copier pointeur de la copie à l'objet. Évidemment quelque chose comme ça ne fonctionne pas ... p> car, le but de la barre est supprimé (le but de copier l'objet en premier lieu), et ceci juste A la copie à la FOO de l'objet au même endroit. P> Quelle est la solution ici? Comment puis-je prendre la valeur de la mémoire allouée de manière dynamique et la copier à une adresse différente? P> p>
3 Réponses :
Je ne vois pas le contexte, mais le code que vous avez posté ne semble pas être copié le pointeur, c'est exactement ce que vous demandez - copier tout ce qu'il pointe. À condition que FOO pointe sur l'objet attribué. P>
Vous allouez un nouvel objet
Je suppose que votre classe ressemble à ceci. Pour effectuer une copie profonde, vous devez créer une copie em> de l'objet référencé par "bar.foo". En C ++, vous le faites simplement en utilisant l'opérateur Remarque: cette solution délégués EM> La décision de savoir si le constructeur de copie nouveau FOO (ConstFoo &) fait également une copie profonde à la mise en œuvre de la classe FOO ... Pour la simplicité, nous supposons que la «bonne chose»! P> [Note ... La question telle que écrite est très déroutante - il demande la «valeur du pointeur de l'objet copié» qui ne ressemble pas à une copie profonde pour moi: cela ressemble à une copie peu profonde, c'est-à-dire que cela . P> neuf code> pour invoquer le constructeur de copie de la classe FOO: p>
Bar(const Bar & bar)
{
this.foo = bar.foo;
}
La question n'a aucun sens. S'il vous plaît essayez de le reformuler, éventuellement publier davantage de code qui illustre ce que vous demandez.
Besoin de plus d'informations: le type de foo serait bon. Tout autre membre. Une explication de la raison pour laquelle vous n'utilisez pas un pointeur intelligent?
Cela traite du tableau mais peut être utile: Stackoverflow.com/Questtions/255612/...