다음을 통해 공유


컴파일러 경고(수준 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;
}