Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
'
this' : utilisé dans la liste des initialiseurs membres de base
Remarques
Le pointeur this est valide uniquement dans les fonctions membres non statiques. Il ne peut pas être utilisé dans la liste d’initialiseurs pour une classe de base.
Les constructeurs de classe de base et les constructeurs membres de classe sont appelés avant le constructeur this. Ce modèle est le même que le passage d’un pointeur à un objet non construit à un autre constructeur. Si ces autres constructeurs accèdent à des membres ou appellent des fonctions membres sur this, le résultat n’est pas défini. Évitez d’utiliser le pointeur this tant que l’intégralité de la construction n’est pas terminée.
Cet avertissement est désactivé par défaut. Pour plus d'informations, consultez Compiler Warnings That Are Off by Default.
Example
L’exemple suivant génère l’erreur 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;
}