Avviso del compilatore C4355

"this": utilizzato nell'elenco degli inizializzatori dei membri di base

Il puntatore this è valido solo all'interno di funzioni membro non static,pertanto non può essere utilizzato nell'elenco degli inizializzatori di una classe base.

I costruttori delle classi base e dei membri di classe vengono chiamati prima del costruttore this.In realtà, un puntatore a un oggetto non costruito è stato passato a un altro costruttore.Se gli altri costruttori accedono a membri o chiamano funzioni membro su tale puntatore, si otterrà un risultato non definito.Non utilizzare il puntatore this fino a quando non sono state completate tutte le costruzioni.

Per impostazione predefinita, questo avviso non è attivo.Per ulteriori informazioni, vedere Avvisi del compilatore disinseriti per impostazione predefinita.

Nell'esempio seguente viene generato l'errore 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;
}