En primer lugar tengo que decir que su código,
MyClass *myclass;
myclass->DoSomething();
provocará un undefined behavior. Porque el puntero "myclass" no apunta a ningún objeto de tipo "Mi Clase".
aquí tengo tres sugerencias para usted: -
la opción 1: - Simplemente puede declarar y utilizar un objeto de tipo MiClase en la pila de la siguiente manera.
MyClass myclass; //allocates memory for the object "myclass", on the stack.
myclass.DoSomething();
opción 2: - Al utilizar el nuevo operador.
MyClass *myclass = new MyClass();
Tres cosas se van a encontrar aquí.
i) Asigna la memoria para el objeto tipo "MyClass" en el montón.
ii) Asigna la memoria para el puntero de tipo "MyClass" "myclass" en la pila.
iii) Puntero "miclase" apunta a la dirección de memoria del objeto de tipo "MyClass" en el montón
Ahora se puede utilizar el puntero para acceder a member functions del objeto después de la eliminación de referencias al puntero "-> "
myclass->DoSomething();
Pero debe liberar la memoria asignada a 'MiClase objeto' tipo en el montón, antes de regresar del ámbito de aplicación a menos que quiera que exista. De lo contrario, provocará un memory leak!
delete myclass; // free the memory pointed by the pointer "myclass"
opción 3: - también se puede hacer de la siguiente manera.
MyClass myclass; // allocates memory for the "MyClass" type object on the stack.
MyClass *myclassPtr; // allocates memory for the "MyClass" type pointer on the stack.
myclassPtr = &myclass; // "myclassPtr" pointer points to the momory address of myclass object.
Ahora, tanto el puntero como el objeto están en la pila. Ahora no puede devolver este puntero al exterior del alcance actual porque ambas memorias asignadas del puntero y el objeto se liberarán al salirse del alcance.
Como resumen, las opciones 1 y 3 asignan un objeto a la pila, mientras que solo la opción 2 lo hará en el montón.
Los objetos no son normalmente montón asignado. Solo los objetos asignados dinámicamente (es decir, los asignados con la palabra clave 'new') están en el montón. Las variables locales, así como los punteros (no los objetos a los que apuntan) se encuentran en la pila. –