Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Objek Dimusnahkan dalam C?

Bagaimanakah Objek Dimusnahkan dalam C?

Barbara Streisand
Barbara Streisandasal
2024-12-10 09:45:12651semak imbas

How Are Objects Destroyed in C  ?

Pemusnahan Objek dalam C

Objek Berskop

Objek Automatik: Dimusnahkan dalam susunan terbalik definisi, apabila skop yang disertakan menyimpulkan.
Bukan Tempatan Statik Objek: Dimusnahkan dalam susunan takrifan terbalik, selepas pelaksanaan utama (pembolehubah global, data ahli statik).
Objek Statik Tempatan: Dibina aliran kawalan kali pertama melepasi takrifannya, dan dimusnahkan dalam susunan terbalik selepas pelaksanaan utama (pembolehubah statik dalam fungsi).

Kelas Asas dan Ahli Subobjek:**

Dimusnahkan dalam susunan takrifan terbalik, subobjek ahli pertama, kemudian subobjek kelas asas.

Elemen Tatasusunan:**

Dimusnahkan dalam tertib menurun. Jika pengecualian berlaku semasa pembinaan elemen n-th, elemen n-1 hingga 0 dimusnahkan terlebih dahulu.

Objek Sementara:**

Dibina apabila ungkapan prvalue jenis kelas dinilai. Dimusnahkan apabila ungkapan yang mengandungi melengkapkan penilaian. Jika pengecualian berlaku semasa penilaian, objek sementara dimusnahkan dengan betul.

Objek dan Tatasusunan Dinamik:**

Objek Dinamik: Diperuntukkan dengan Foo baharu dan dimusnahkan dengan padam p .
Susun Dinamik: Diperuntukkan dengan Foo[n] baharu dan dimusnahkan dengan padam[] p.

Dalam kedua-dua kes, cuba memusnahkan memori berbilang kali, mengakses selepas pemusnahan atau menggunakan mekanisme pemusnahan yang salah (cth., padam[] untuk objek tunggal ) mengakibatkan tingkah laku yang tidak ditentukan. Jika pengecualian berlaku semasa pembinaan, memori yang diperuntukkan secara dinamik dikeluarkan sebelum pengecualian itu disebarkan.

Petunjuk Pintar Mengira Rujukan:**

std::shared_ptr: Memusnahkan objek terurus sebagai yang terakhir std::shared_ptr objek yang merujuknya dimusnahkan.

Gelagat Pengecualian:

Pemusnah tidak boleh membuang pengecualian kerana ini boleh menamatkan program. Jika pengecualian berlaku semasa pemusnahan objek, ia disebarkan dan semua subobjek yang dimusnahkan sebelum ini dimusnahkan dengan betul. Walau bagaimanapun, jika pengecualian objek dinamik berlaku semasa pembinaan, memori dilepaskan sebelum pengecualian merambat dan pemusnah objek tidak dipanggil.

Atas ialah kandungan terperinci Bagaimanakah Objek Dimusnahkan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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