Condividi tramite


Avviso del compilatore (livello 1 e livello 4, disattivato) C4355

'this': usato nell'elenco di inizializzatori dei membri di base

Il this puntatore è valido solo all'interno di funzioni membro non statiche. Non può essere usato nell'elenco di inizializzatori per una classe di base.

I costruttori della classe base e i costruttori dei membri della classe vengono chiamati prima this del costruttore. Questo modello equivale a passare un puntatore a un oggetto non ordinato a un altro costruttore. Se tali altri costruttori accedono a qualsiasi membro o chiamano funzioni membro in this, il risultato non è definito. Non è consigliabile usare il this puntatore fino al completamento di tutte le costruzioni.

Per impostazione predefinita, questo avviso non è attivo. Per altre informazioni, vedere Compiler Warnings That Are Off by Default.

L'esempio seguente genera 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;
}