Freigeben über


Compilerwarnung (Ebene 1 und Ebene 4, deaktiviert) C4355

'this': Wird in der Basiselementinitialisierungsliste verwendet

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

Die Konstruktoren der Basisklasse und die Klassenmemberkonstruktoren werden vor dem this-Konstruktor aufgerufen. Dieses Muster entspricht dem Übergeben eines Zeigers an ein unstrukturiertes Objekt an einen anderen Konstruktor. Wenn diese anderen Konstruktoren auf Elemente zugreifen oder Memberfunktionen in this aufrufen, ist das Ergebnis nicht definiert. Sie sollten den this-Zeiger erst verwenden, wenn alle Konstruktionen abgeschlossen sind.

Diese Warnung ist standardmäßig deaktiviert. Weitere Informationen finden Sie unter Compiler Warnings That Are Off by Default.

Im folgenden Beispiel wird C4355 generiert:

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