Udostępnij za pośrednictwem


Ostrzeżenie kompilatora (poziom 1 i poziom 4, wyłączone) C4355

'this': używany na liście inicjatora podstawowego elementu członkowskiego

Wskaźnik this jest prawidłowy tylko w funkcjach niestatycznych składowych. Nie można jej używać na liście inicjatorów dla klasy bazowej.

Konstruktory klasy bazowej i konstruktory składowe klasy są wywoływane przed konstruktorem this . Ten wzorzec jest taki sam, jak przekazywanie wskaźnika do niezkonstrukowanego obiektu do innego konstruktora. Jeśli te inne konstruktory uzyskują dostęp do dowolnych elementów członkowskich lub wywołają funkcje członkowskie w elemencie this, wynik jest niezdefiniowany. Nie należy używać wskaźnika do momentu ukończenia całej this konstrukcji.

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

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