2009-03-24 9 views

Répondre

36

La seconde est fausse!

Vous pouvez utiliser

MyClass object; 

qui fonctionne. Maintenant, en ce qui concerne le choix entre ces deux possibilités, cela dépend principalement de la durée de vie de votre objet. Voir there pour une réponse complète.

8

L'opérateur new renvoie un pointeur sur l'objet qu'il crée, de sorte que l'expression Myclass object = new Myclass(); n'est pas valide.

D'autres langages n'ont pas de pointeurs explicites comme C++, donc vous pouvez écrire des instructions comme Myclass object = new Myclass();, mais en C++ ce n'est simplement pas possible. Le type de retour de new Myclass(); est un pointeur vers un objet Myclass, c'est-à-dire Myclass *.

7

Le premier exemple crée un pointeur vers MyClass et l'initialise pour pointer vers le résultat du nouvel opérateur.

La seconde ne sera probablement pas compilée, car elle tente de créer un objet MyClass et de l'affecter à un pointeur MyClass. Cela pourrait fonctionner dans le cas improbable où vous avez un constructeur MyClass qui accepte un pointeur MyClass.

3

Le premier est correct.

La seconde ne sera généralement pas compilée. Et s'il compile alors la classe fait des choses compliquées dans un constructeur/opérateur d'assignation. Et ça fuit probablement la mémoire.

53
Myclass *object = new Myclass(); //object is on the heap 
Myclass object; //object is on the stack 

Vous créez des objets sur le tas si vous prévoyez de les utiliser tout au long d'une longue période de temps et vous créez des objets sur la pile pour une courte durée de vie (ou étendue).

6

Votre première ligne de code est correcte tandis que la deuxième ligne de code est incorrecte.

Myclass object=new Myclass(); //Incorrect code 

Au-dessus de code est incorrect comme new MyClass(); renvoyer le pointeur vers la classe et Objet Myclass; déclare un objet de classe et vous essayez d'affecter un pointeur à la classe à l'objet de la classe, ce qui est incorrect.

Votre première ligne de code est correcte. Mais ceci indique que le pointeur sur la classe n'est pas l'objet de la classe.

Myclass *object = new Myclass(); //declares pointer to class. 

Pour déclarer un objet de classe, vous devez écrire le code suivant.

Myclass object; //declares object of class Myclass 

Mais il faut noter que la façon d'accéder à membre de la classe en utilisant le pointeur de classe et en utilisant les objets de classe sont différents. Voici le code pour accéder aux membres de la classe.

pointer_to_class->member; // accessing class member using pointer to class 
object.member;    //accessing class member using object of class 
10

Votre première ligne est correcte à 100%. Malheureusement, vous ne pouvez pas créer d'objet avec votre deuxième ligne en C++. Il y a deux façons de créer/créer un objet en C++.

La première est:

MyClass myclass; // if you only need to call the default constructor  
MyClass myclass(12); // if you need to call constructor with parameters* 

La deuxième est:

MyClass *myclass = new MyClass();// if you only need to call the default constructor 
MyClass *myclass = new MyClass(12);// if you need to call constructor with parameters 

En C++ si vous utilisez le mot-clé new, objet sera stocké dans tas. C'est très utile si vous utilisez cet objet pendant une longue période et si vous utilisez la première méthode, elle sera stockée dans la pile. il peut être utilisé seulement une courte période de temps. Remarque: si vous utilisez le mot-clé new, n'oubliez pas qu'il renvoie la valeur du pointeur. Vous devez déclarer le nom avec *. Si vous utilisez la seconde méthode, elle ne supprime pas l'objet dans le tas. Vous devez supprimer par vous-même en utilisant delete mot-clé:

delete myclass; 
Questions connexes