Disponible la versión 6 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


Ejemplo

Demostración de la invocación automática del constructor; constructor-copia, y destructor de objetos por el compilador, incluyendo la creación de objetos temporales.


#include <iostream>
using namespace std;

class Vector {
  public: float x, y;
  Vector (int i = 0, int j = 0) {   // constructor por defecto
    cout << "Constructor." << endl;
    x = i; y = j;
  }
  Vector(const Vector& v) {         // constructor-copia
    cout << "Constructor-copia" << endl;
    x = v.x; y = v.y;
  }
  ~Vector() {                // destructor
    cout << "Destructor." << endl;
  }
};

Vector func (Vector v) {     // función auxiliar
   v.x = v.x+1; v.y = v.y+1;
   return v;
}

void main() {                // =====================
  Vector v1(1,2);            // M1:
  Vector v2 = v1;            // M2:
  Vector v3 = func(v1);      // M3:
  v2 = v3;                   // M4:
}                            // M5:

Salida:

Constructor.
Constructor-copia
Constructor-copia
Constructor-copia
Destructor.
Destructor.
Destructor.
Destructor.

Comentario

Las salidas tienen la siguiente justificación:

M.1:  Invocación al constructor por defecto (sin argumentos)  -> Salida 1.

M.2:  Invocación al constructor-copia (crea obj2 con el mismo contenido que obj1) -> Salida 2.

M.3: a.-  Invocación de la función: Invocación del constructor-copia para crear un objeto v local a la función, igual que el objeto obj1 pasado como argumento -> Salida 3.

        b.-  Invocación del constructor-copia para crear un objeto obj3, con el mismo contenido que el valor devuelto por la función -> Salida 4. Simultáneamente termina la función y se invoca al destructor para terminar el objeto v -> Salida 5.

M.4:  No se invoca ningún constructor.  La asignación es totalmente distinta de la construcción y de la construcción-copia (se realiza entre objetos ya creados).

M.5:  Invocación de los destructores de los objetos obj1, obj2 y obj3, Salidas 6, 7 y 8.


  Ejemplo relacionado: 4.11.2d2w1