Bagikan melalui


Compiler Warning (level 1 dan level 4, off) C4355

'this': digunakan dalam daftar inisialisasi anggota dasar

Penunjuk this hanya valid dalam fungsi anggota nonstatis. Ini tidak dapat digunakan dalam daftar penginisialisasi untuk kelas dasar.

Konstruktor kelas dasar dan konstruktor anggota kelas dipanggil sebelum this konstruktor. Pola ini sama dengan meneruskan pointer ke objek yang tidak dikonstruksi ke konstruktor lain. Jika konstruktor lain tersebut mengakses anggota atau memanggil fungsi anggota pada this, hasilnya tidak ditentukan. Anda tidak boleh menggunakan this pointer sampai semua konstruksi selesai.

Peringatan ini nonaktif secara default. Untuk informasi selengkapnya, lihat Peringatan Pengkompilasi yang Nonaktif secara Default.

Sampel berikut menghasilkan 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;
}