Compilerwarnung (Stufen 1 und 4) C4355

Aktualisiert: November 2007

Fehlermeldung

"this": Wird in der Basisliste für den Memberinitialisierer verwendet
'this' : used in base member initializer list

Der this-Zeiger ist nur in nicht statischen Memberfunktionen gültig. Er kann in der Initialisiererliste für eine Basisklasse nicht verwendet werden.

Die Konstruktoren für Basisklassen und Klassenmember werden vor dem this-Konstruktor aufgerufen. Tatsächlich wurde ein Zeiger auf ein nicht erstelltes Objekt an einen anderen Konstruktor übergeben. Wenn diese anderen Konstruktoren auf Member zugreifen oder Memberfunktionen für this aufrufen, ist das Ergebnis nicht definiert. Sie sollten den this-Zeiger nicht verwenden, bis die Erstellung vollständig abgeschlossen ist.

Bei Verwendung der Microsoft-Erweiterungen (/Ze) ist dies eine Warnung der Stufe 1, andernfalls eine Warnung der Stufe 4.

Im folgenden Beispiel wird C4355 generiert:

// C4355.cpp
// compile with: /W1 /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;
}