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;
}