orientada Diferentes métodos para crear instancias de un objeto en C++




codigo de clases en c++ (6)

¿Cuál es la diferencia entre esto?

Myclass *object = new Myclass();

y

Myclass object = new Myclass();

He visto que muchas bibliotecas de C ++ como wxWidgets, OGRE, etc. usan el primer método ... ¿Por qué?


Answer #1

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

Otros lenguajes no tienen punteros explícitos como C ++, por lo que puede escribir enunciados 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 * .


Answer #2

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

El código anterior es incorrecto como new Myclass (); devolver el puntero a la clase y el objeto Myclass; declara objeto de clase e intenta asignar puntero a clase al objeto de clase, que es incorrecto.

Tu 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 objeto de clase debe escribir el siguiente código.

Myclass object;   //declares object of class Myclass

Pero debe tener en cuenta que la forma de acceder al miembro de la clase usando puntero a clase y utilizando el objeto de clase es diferente. 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 

Answer #3

¡El segundo es incorrecto!

Puedes 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. Mira there para una respuesta completa.


Answer #4
Myclass *object = new Myclass(); //object is on the heap
Myclass object; //object is on the stack

Puede crear objetos en el montón si planea usarlos durante un largo período de tiempo y crea objetos en la pila durante un período de vida corto (o alcance).


Answer #5

Tu 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*

El 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 usa la palabra clave new , el objeto se almacenará 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 una palabra clave new , recuerde que devolverá el valor del puntero. Debes declarar el nombre con * . Si usa el segundo método, no elimina el objeto en el montón. Debe eliminarlo usted mismo usando la palabra clave delete :

delete myclass;

Answer #6

El primero es correcto

El segundo generalmente no 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.





object