Upozornění kompilátoru (úroveň 1 a úroveň 4, vypnuto) C4355
'
this
': používá se v seznamu inicializátorů základních členů.
Ukazatel this
je platný pouze v rámci nestatických členských funkcí. Nedá se použít v seznamu inicializátorů pro základní třídu.
Konstruktory základní třídy a členské konstruktory třídy jsou volána před this
konstruktorem. Tento vzor je stejný jako předání ukazatele na nekonstruovaný objekt jinému konstruktoru. Pokud tyto ostatní konstruktory přistupují k některým členům nebo volají členské funkce this
, výsledek není definován. Ukazatel byste neměli používat this
, dokud nebude dokončena všechna konstrukce.
Toto upozornění je ve výchozím nastavení vypnuté. Další informace najdete v tématu Upozornění kompilátoru, která jsou ve výchozím nastavení vypnutá.
Následující ukázka vygeneruje 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;
}