Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Pelbagai Pemusnah dalam GNU GCC (g ) Berbeza dan Mengapa Ia Dijana?

Bagaimanakah Pelbagai Pemusnah dalam GNU GCC (g ) Berbeza dan Mengapa Ia Dijana?

Susan Sarandon
Lepaskan: 2024-10-24 03:43:02
asal
268 orang telah melayarinya

How Do Multiple Destructors in GNU GCC (g  ) Differ and Why Are They Generated?

Berbilang Pemusnah dalam GNU GCC (g )

Soalan:

Semasa menyiasat liputan kod dalam GNU GCC (g ), berbilang pemusnah diperhatikan untuk kedua-dua BaseClass dan DerivedClass. Mengapakah berbilang pemusnah ini dijana dan bagaimanakah ia berbeza?

Jawapan:

Dalam Itanium C ABI, tiga jenis pemusnah ditakrifkan:

  • D2 (pemusnah objek asas): Memusnahkan objek itu sendiri, kelas asas bukan maya dan ahli data.
  • D1 (pemusnah objek lengkap): Memusnahkan objek, termasuk kelas asas maya.
  • D0 (memadamkan pemusnah objek): Memusnahkan objek, memanggil operator padam untuk membebaskan memori.

Berbilang Pemusnah dalam Kod Diberi:

Kod yang diberikan menjana berbilang pemusnah kerana ia termasuk kelas asas maya. Dalam kes ini:

  • DerivedClass::~DerivedClass() ialah pemusnah D1, yang memusnahkan objek DerivedClass dan kelas asas mayanya (BaseClass).
  • DerivedClass::~DerivedClass () ialah pemusnah D2, yang hanya memusnahkan objek DerivedClass, tidak termasuk kelas asas maya.
  • BaseClass::~BaseClass() ialah pemusnah D1 untuk subobjek BaseClass dalam DerivedClass.

Penggunaan Pemusnah Terpilih:

Itanium C ABI menentukan pemusnah mana yang dilaksanakan:

  • Memadamkan penunjuk ke kelas asas (mis., padam b_ptr) memanggil D0 (lalai) atau D1 (jika kelas mempunyai pemusnah maya).
  • Memadamkan penuding kepada penuding objek lengkap (cth., DerivedClass* dptr) memanggil D1.

Implikasi Liputan:

Untuk mencapai liputan fungsi 100%, adalah penting untuk memahami pemusnah ini dan menggunakannya dengan sewajarnya dalam ujian unit. Contohnya, b_ptr harus dipadamkan sebagai BaseClass* b_ptr untuk melaksanakan D0 dan meliputi kedua-dua pemusnah.

Atas ialah kandungan terperinci Bagaimanakah Pelbagai Pemusnah dalam GNU GCC (g ) Berbeza dan Mengapa Ia Dijana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan