domingo, 15 de junio de 2008

/funciones defaulted - C++




Caí bajo ciertos mitos acerca de C++ que me costaron 12 kg menos. Lo expongo porque quizás a alguien le ayude y le ahorre minutos valiosos.

Contexto: trabajando en C++, g++ bajo linux (SuSE).
Mito: asumir que el compilador siempre crea el constructor por defecto.

Situación: clase C con constructor por copia, sin constructor por defecto declarado.


class C
{
public:
C(const C& arg);
};



Luego cuando en el código declaramos objC:

C objC; //error: "no default constructor exists for class C"
C * pobjC= new C; //mismo error

Cuando se declara un constructor por copia el compilador no declara el constructor por defecto.

Esto puede solucionarse de dos maneras:

1- Creando manualmente el constructor

class C
{
public:
C(const C& arg);
C() {} // declaración y definición manual
};


C obj; // Funciona correctamente

A quienes les interese la eficiencia, declarar manualmente el constructor suele ser menos eficiente que la definición implícita del compilador.

Por eso se menciona la solución 2: funciones defaulted (es eficiente)


Class C
{
  inline C()=default;
};


Raras veces me he visto en la necesidad de apelar a una eficiencia tan ultra, por lo que suelo definir el constructor como vacío.
De todos modos es bueno saberlo, porque hay situaciones donde es necesario. El artículo de informit está interesante para entender varios tips sobre C++.


vía informit








No hay comentarios.: