Les différentes méthodes pour l'instanciation d'un objet en C++
Quelle est la différence entre ceci:
Myclass *object = new Myclass();
et
Myclass object = new Myclass();
J'ai vu que beaucoup de bibliothèques C++ comme wxWidgets, l'OGRE etc d'utiliser la première méthode... Pourquoi?
- La deuxième ligne est valable sans le
new
mot-clé..Myclass object = Myclass();
. Vérifier cette question pour plus de détails.
Vous devez vous connecter pour publier un commentaire.
Le second est faux !
Vous pouvez utiliser
Qui fonctionne.
Maintenant, concernant la façon de choisir entre ces deux possibilités, il dépend principalement de la durée de votre objet doit vivre. Voir il y pour une bonne réponse.
Vous créer des objets dynamiques de la durée de stockage (généralement sur le tas) si vous prévoyez de les utiliser tout au long d'une longue période de temps et vous créer des objets avec automatique de la durée de stockage (généralement sur la pile) pour une durée de vie courte (ou portée).
Myclass object();
?Votre première ligne est correcte à 100%. Malheureusement, vous ne pouvez pas créer l'objet avec votre deuxième ligne en c++. Il y a deux façons de faire/créer un objet en c++.
Premier est :
Deuxième est :
En c++ si vous utilisez le
new
mot-clé, objet est stocké en tas. Il est très utile si vous utilisez cet objet pour une longue période de temps et si vous utilisez la première méthode, elle sera stockée dans la pile. il peut être utilisé qu'une courte période de temps.Avis: si vous utilisez
new
mot-clé, n'oubliez pas qu'il sera de retour la valeur du pointeur. Vous devez déclarer le nom avec*
.Si vous utilisez la deuxième méthode, il n'est pas supprimer l'objet dans le tas. Vous devez les supprimer vous-même à l'aide de
delete
mot-clé:La
new
opérateur renvoie un pointeur vers l'objet qu'il crée, donc l'expressionMyclass object = new Myclass();
est pas valide.D'autres langues n'ont pas les pointeurs comme le C++, donc vous pouvez écrire des déclarations comme
Myclass object = new Myclass();
, mais en C++, ce n'est tout simplement pas possible. Le type de retour denew Myclass();
est un pointeur vers uneMyclass
objet, c'est à direMyclass *
.Le premier exemple crée un pointeur vers MyClass et l'initialise à point pour le résultat de l'opérateur new.
La deuxième ne sera probablement pas compiler, comme il est d'essayer de créer un objet Maclasse et l'attribuer à un MyClass pointeur. Cela pourrait fonctionner dans le cas peu probable que vous avez un MyClass constructeur qui accepte un MyClass pointeur.
Votre première ligne de code est correct, tandis que la deuxième ligne de code est incorrect.
Code ci-dessus est incorrecte comme new Myclass(); retourne le pointeur de classe et objet Maclasse; déclare un objet de la classe et que vous essayez d'assigner pointeur vers la classe de l'objet de la classe, ce qui est incorrect.
Votre première ligne de code est correct. Mais il déclare pointeur vers la classe n'est pas l'objet de la classe.
De déclarer un objet de la classe, vous devez écrire de code suivant.
Mais vous devriez noter que la façon d'accéder à la classe membre à l'aide du pointeur de la classe et à l'aide d'un objet de la classe sont différents. voici le code pour l'accès aux membres de la classe.
La première est correcte.
La deuxième ne sera généralement pas compiler. Et si c'est le compiler puis la classe est en train de faire certaines choses compliquées dans un constructeur/opérateur d'affectation. Et c'est probablement une fuite de mémoire.