Вы находитесь на странице: 1из 3

Constructores

Son unos mtodos especiales que se ejecutan automticamente al crear un objeto de la clase. En su declaracin no se especifica el tipo de dato que devuelven, y poseen el mismo nombre que la clase a la que pertenecen. Al igual que otros mtodos, puede haber varios constructores sobrecargados, aunque no pueden existir constructores virtuales. Como caracterstica especial a la hora de implementar un constructor, justo despus de la declaracin de los parmetros, se encuentra lo que se llama "lista de inicializadores". Su objetivo es llamar a los constructores de los atributos que conforman el objeto a construir. Cabe destacar que no es necesario declarar un constructor al igual que un destructor, pues el compilador lo puede hacer, aunque no es la mejor forma de programar. Existen varios tipos de constructores en C++: 1. Constructor predeterminado. Es el constructor que no recibe ningn parmetro en la funcin. Si no se definiera ningn constructor, el sistema proporcionara uno predeterminado. Es necesario para la construccin de estructuras y contenedores de la STL. 2. Constructor de copia. Es un constructor que recibe un objeto de la misma clase, y realiza una copia de los atributos del mismo. Al igual que el predeterminado, si no se define, el sistema proporciona uno. 3. Constructor de conversin. Este constructor, recibe como nico parmetro, un objeto o variable de otro tipo distinto al suyo propio. Es decir, convierte un objeto de un tipo determinado a otro objeto del tipo que estamos generando. Constructores + Memoria heap Un objeto creado de la forma que se vio hasta ahora, es un objeto que vive dentro del scope(las llaves { }) en el que fue creado. Para que un objeto pueda seguir viviendo cuando se saque de el scope en el que se cre, se lo debe crear en memoria heap. Para esto, se utiliza el operador new, el cual asigna memoria para almacenar al objeto creado, y adems llama a su constructor(por lo que se le pueden enviar parmetros). El operador new se utiliza de la siguiente manera:
int main() {

Punto *unPunto = new Punto(); //esto llama al constructor que se describe ms arriba delete unPunto; //no hay que olvidarse de liberar la memoria ocupada por el objeto(ver la seccin destructores, ms abajo) return 0; }

Adems, con el operador new[] se pueden crear arrays (colecciones o listas ordenadas) de tamao dinmico:
Punto *asignar(int cuantos) { return new Punto[cuantos]; //asigna un array de 'cuantos' puntos(se llama el constructor que se muestra ms arriba), y se retorna. }

Destructores
Los destructores son funciones miembro especiales llamadas automticamente en la ejecucin del programa, y por tanto no tienen por qu ser llamadas explcitamente por el programador . Sus principales cometidos son:

Liberar los recursos computacionales que el objeto de dicha clase haya adquirido en tiempo de ejecucin al expirar ste. Quitar los vnculos que pudiesen tener otros recursos u objetos con ste.

Los destructores son invocados automticamente al alcanzar el flujo del programa el fin del mbito en el que est declarado el objeto. El nico caso en el que se debe invocar explcitamente al destructor de un objeto, es cuando ste fue creado mediante el operador new, es decir, que ste vive en memoria heap, y no en la pila de ejecucin del programa. La invocacin del destructor de un objeto que vive en heap se realiza a travs del operador delete o delete[] para arrays. Si no se utilizara el operador delete y delete[] en ese caso, la memoria ocupada por unEntero y arrayDeEnteros respectivamente, quedara ocupada sin sentido. Cuando una porcin de memoria queda ocupada por una variable que ya no se utiliza, y no hay forma de acceder a ella, se denomina un 'memory leak'. En aplicaciones grandes, si ocurren muchos memory leaks, el programa puede terminar ocupando bastante ms memoria RAM de la que debera, lo que no es para nada conveniente. Es por esto, que el manejo de memoria heap debe usarse conscientemente. Existen dos tipos de destructores pueden ser pblicos o privados, segn si se declaran:

Si es pblico se llama desde cualquier parte del programa para destruir el objeto. Si es privado no se permite la destruccin del objeto por el usuario.

El uso de destructores es clave en el concepto de Adquirir Recursos es Inicializar.

Вам также может понравиться