Udostępnij za pośrednictwem


Ostrzeżenie kompilatora C4355

"this": używane w listy inicjator podstawowych elementów członkowskich

To wskaźnik jest prawidłowy tylko wewnątrz funkcji niestatycznego członka.Nie można użyć listy inicjatora klasy podstawowej.

Konstruktory klasy base i konstruktorów klas Członkowskich są nazywane przed to konstruktora.W efekcie został przekazany wskaźnik do obiektu unconstructed do innego konstruktora.Jeśli tych innych konstruktorów dostępu członków lub Członkowskie wywoływać funkcje w tej sprawie, wynik będzie niezdefiniowany.Nie należy używać to wskaźnik, dopóki wszystkie budowa została ukończona.

To ostrzeżenie jest domyślnie wyłączona.Zobacz Ostrzeżenia kompilatora, które są domyślnie wyłączone Aby uzyskać więcej informacji.

Poniższy przykład generuje 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;
}