Udostępnij za pośrednictwem


Ostrzeżenie kompilatora C4355

"this": używany na liście inicjator członek bazy

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

Konstruktorów klas bazowych i konstruktorów klas Członkowskich są nazywane przed tego Konstruktor.W efekcie został przekazany wskaźnik do obiektu unconstructed do innego konstruktora.Jeśli tych innych konstruktorów dostępu do wszystkich członków lub wywołanie funkcji Członkowskich w tej sprawie, wynik będzie niezdefiniowany.Nie należy korzystać z tego wskaźnik, dopóki wszystkie budowa została zakończona.

To ostrzeżenie jest domyślnie wyłączona.Aby uzyskać więcej informacji, zobacz Domyślnie wyłączone ostrzeżenia kompilatora.

Poniższy przykład spowoduje wygenerowanie błędu 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;
}