Sdílet prostřednictvím


Upozornění kompilátoru C4355

"toto: v základní člen seznamu inicializátor.

Této je platná pouze v rámci funkce členů nestatické ukazatel.Jej nelze použít v seznamu inicializátor základní třídy.

Základní třída konstruktory a konstruktory člen třídy se nazývají před této konstruktor.Ukazatel ve skutečnosti jste předán unconstructed objekt jiného konstruktoru.Pokud tyto jiné konstruktory přístup všech členů volání funkce člena na tomto, výsledek bude undefined.Nepoužívejte této ukazatel myši, dokud všechny konstrukce.

Ve výchozím nastavení je vypnuto upozornění.Další informace naleznete v tématu Upozornění kompilátoru, která jsou ve výchozím nastavení vypnuté.

Následující ukázka 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;
}