Disponible la nueva versión "donationware" 7.3 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