114 votes

Quelle est la différence entre instancier un objet en utilisant nouveau ou sans

En C++,

Outre l'allocation de mémoire dynamique, y a-t-il une différence fonctionnelle entre les deux lignes de code suivantes :

Time t (12, 0, 0); //t is a Time object

Time* t = new Time(12, 0, 0);//t is a pointer to a dynamically allocated Time object

Je suppose bien sûr qu'un temps(int, int, int) ctor a été défini. Je me rends également compte que, dans le deuxième cas, il faudra supprimer le t tel qu'il a été alloué sur le tas. Y a-t-il une autre différence ?

35voto

Manoj R Points 1593

Une différence plus évidente est lors de l'accès aux variables et méthodes de t.

Time t (12, 0, 0);
t.GetTime();

Time* t = new Time(12, 0, 0);
t->GetTime();

5voto

Ates Goral Points 47670

En ce qui concerne le constructeur, les deux formes sont fonctionnellement identiques : elles vont simplement faire en sorte que le constructeur soit appelé sur une instance d'objet nouvellement allouée. Vous semblez déjà avoir une bonne compréhension des différences en termes de modes d'allocation et de durée de vie des objets.

3voto

haibo cu Points 94
  • Utilisez la nouvelle fonction Call operator new pour obtenir de la mémoire dynamique, puis pour appeler la fonction constuctor.
  • Ne pas utiliser de nouveau : N'appellera pas la nouvelle fonction de l'opérateur, juste directement pour appeler la fonction de constucteur. La pile sera utilisée directement, pas d'utilisation pour malloc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X