编译器警告(级别 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;
}