次の方法で共有


コンパイラの警告 C4355

'this' : ベース メンバー初期化リストで使用されました。

this ポインターを使用できるのは、非静的メンバー関数の中だけです。基本クラスの初期化子リストでは使用できません。

基本クラスのコンストラクターとクラス メンバー コンストラクターが、this コンストラクターの前に呼び出されています。初期化されていないオブジェクトへのポインターを別のコンストラクターに渡しています。渡されたコンストラクターが、このポインターによってメンバーにアクセスするかメンバー関数を呼び出すと、結果は未定義になります。this ポインターは、すべての構築が完了するまで使用しないでください。

既定では、この警告はオフに設定されています。詳細については、「既定で無効になっているコンパイラの警告」を参照してください。

次の例では 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;
}