Compartir a través de


Advertencia del compilador C4355

'this': utilizado en la lista de inicializadores de miembro base

El puntero this sólo es válido para funciones miembro no estáticas.No se puede utilizar en la lista de inicializadores de una clase base.

Las llamadas a los constructores de clase base y miembros de clase tienen lugar antes de este constructor this.En efecto, se ha pasado un puntero a un objeto no construido a otro constructor.Si esos otros constructores obtienen acceso a cualquier miembro o llaman a funciones miembro en this, el resultado será indefinido.No se debe usar el puntero this hasta que finalicen todas las operaciones de construcción.

De forma predeterminada, esta advertencia está desactivada.Para obtener más información, consulte Advertencias del compilador Desactivadas De forma predeterminada.

El ejemplo siguiente genera el error C4355:

// C4355.cpp
// compile with: /w14355 /c
#include <tchar.h>

class CDerived;
class CBase {
public:
   CBase(CDerived *derived): m_pDerived(derived) {};
   ~CBase();
   virtual void function() = 0;

   CDerived * m_pDerived;
};

class CDerived : public CBase {
public:
   CDerived() : CBase(this) {};   // C4355 "this" used in derived c'tor
   virtual void function() {};
};

CBase::~CBase() {
   m_pDerived -> function();
}

int main() {
   CDerived myDerived;
}