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

Susan Sarandon
Lepaskan: 2024-10-24 03:43:02
asal
183 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!

sumber: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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan