2009-03-24 17 views

Respuesta

36

¡El segundo es incorrecto!

Es posible utilizar

MyClass object; 

que funcionará.

Ahora, con respecto a cómo elegir entre estas dos posibilidades, depende principalmente de cuánto tiempo debe vivir su objeto. Vea there para una respuesta completa.

8

El operador new devuelve un puntero al objeto que crea, por lo que la expresión Myclass object = new Myclass(); no es válida.

Otros idiomas no tienen punteros explícitos como C++, por lo que puede escribir sentencias como Myclass object = new Myclass();, pero en C++ esto simplemente no es posible. El tipo de devolución de new Myclass(); es un puntero a un objeto Myclass, es decir, Myclass *.

7

El primer ejemplo crea un puntero a MyClass y lo inicializa para que apunte al resultado del nuevo operador.

Es probable que el segundo no se compile, ya que está intentando crear un objeto MyClass y asignarlo a un puntero MyClass. Esto podría funcionar en el improbable caso de que tenga un constructor MyClass que acepte un puntero MyClass.

3

El primero es correcto.

El segundo generalmente no se compilará. Y si se compila, entonces la clase está haciendo algunas cosas complicadas en un operador de constructor/asignación. Y probablemente esté perdiendo memoria.

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

crear objetos en el montón si los va a utilizar a lo largo de un largo período de tiempo y crear objetos en la pila por un corto tiempo de vida (o alcance).

6

Su primera línea de código es correcta mientras que la segunda línea de código es incorrecta.

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

Por encima de código es incorrecto, ya que nueva Myclass(); puntero de regreso a la clase y objeto Myclass; declara objeto de clase y está intentando asignar puntero a clase al objeto de clase, que es incorrecto.

Su primera línea de código es correcta. Pero esto declara puntero a clase no el objeto de clase.

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

Para declarar el objeto de la clase debe escribir el siguiente código.

Myclass object; //declares object of class Myclass 

Pero debe tener en cuenta que la forma de acceder a miembro de la clase utilizando el puntero a la clase y el uso de objeto de la clase son diferentes. siguiente es el código para acceder a los miembros de la clase.

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

Su primera línea es 100% correcta. Desafortunadamente, no puedes crear objetos con tu segunda línea en C++. Hay dos formas de crear/crear un objeto en C++.

El primero es:

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

segundo es:

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 se utiliza la palabra clave new, objeto se almacena en el montón. Es muy útil si está utilizando este objeto durante un largo período de tiempo y si usa el primer método, se almacenará en la pila. solo se puede usar durante un período de tiempo corto. Aviso: si usa la palabra clave new, recuerde que devolverá el valor del puntero. Debe declarar el nombre con *. Si usa el segundo método, no elimina el objeto en el montón. Debe eliminar usted mismo usando la palabra clave delete:

delete myclass; 
Cuestiones relacionadas