Compartilhar via


Aviso do compilador C4355

“ou”: usado na lista de base de inicializador de membro

O ponteiro de this é válido somente nas funções de membro não estática.Não pode ser usado na lista de inicialização de uma classe base.

Os construtores de classe base e construtores do membro da classe são chamados antes do construtor de this .Em a verdade, você passou um ponteiro para um objeto unconstructed a outro construtor.Se os outros construtores acessam quaisquer membros ou funções de membro de chamada de isso, o resultado será indefinido.Você não deve usar o ponteiro de this até que qualquer compilação terminar.

Esse aviso é por padrão.Consulte Avisos do compilador são desativados por padrão para maiores informações.

O exemplo a seguir produz 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;
}