Partager via


Avertissement du compilateur C4355

'this' : utilisé dans la liste des initialiseurs membre de base

Le pointeur this n'est valide qu'à l'intérieur de fonctions membres non statiques.Il ne peut pas être utilisé sur la liste d'initialiseurs d'une classe de base.

Les constructeurs de classe de base et de membre de classe sont appelés avec le constructeur this.En fait, vous avez passé à un autre constructeur un pointeur vers un objet non construit.Si ces autres constructeurs accèdent aux membres ou appellent des fonctions membres, le résultat sera indéfini.Vous ne devriez utiliser le pointeur this qu'après la fin de la construction.

Cet avertissement est désactivé par défaut.Consultez Avertissements du compilateur qui sont éteints par défaut pour plus d'informations.

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;
}