Поделиться через


Предупреждение компилятора (уровень 1 и уровень 4, отключено) C4355

'this': используется в списке инициализаторов базовых элементов

Указатель this действителен только в нестатических функциях-членах. Его нельзя использовать в списке инициализатора для базового класса.

Конструкторы базового класса и конструкторы элементов класса вызываются перед this конструктором. Этот шаблон совпадает с передачей указателя на неконструктируемый объект другому конструктору. Если другие конструкторы получают доступ к любым членам или вызывают функции-члены this, результат не определен. Указатель не следует использовать this , пока не завершится все строительство.

Это предупреждение отключено по умолчанию. Дополнительные сведения см. в разделе Compiler Warnings That Are Off by Default.

Следующий пример приводит к возникновению ошибки 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;
}