Pemusnahan Objek dalam C
Pemusnahan Objek: Apa, Bila dan Bagaimana
Dalam C , objek boleh dikelaskan secara meluas sebagai objek berskop dan dinamik objek. Objek berskop mempunyai jangka hayat yang terikat dengan skop tertutupnya (cth., pembolehubah tempatan, pembolehubah global, kejadian kelas), manakala objek dinamik dicipta dan dimusnahkan menggunakan penunjuk (cth., baharu, padam).
Skop Objek
-
Automatik Objek: Dimusnahkan dalam susunan terbalik penciptaan apabila aliran kawalan keluar dari skopnya (cth., keluar fungsi, hujung blok).
-
Objek Statik Bukan Tempatan: Dimusnahkan secara songsang tertib penciptaan selepas pelaksanaan main().
-
Statik Tempatan Objek: Dibina apabila aliran kawalan memasuki takrifannya buat kali pertama dan dimusnahkan dalam susunan terbalik selepas pelaksanaan main().
-
Kelas Asas dan Subjek Ahli: Dimusnahkan dalam susunan terbalik dalam pemusnah objek, diikuti dengan subobjek kelas asasnya.
-
Array Elemen: Dimusnahkan dalam susunan menurun.
-
Objek Sementara: Dicipta daripada ungkapan prvalue, dimusnahkan apabila ekspresi penuh dinilai.
Dinamik Objek
- Objek Dinamik (Fo baharu): Dimusnahkan dengan secara eksplisit memanggil padam p.
- Aturan Dinamik (Fo[n] baharu ): Dimusnahkan dengan memanggil secara eksplisit padam[] p.
Pengendalian Pengecualian
- Pengecualian disebarkan kembali melalui timbunan, memanggil pemusnah pada objek automatik yang dibuat sebelum ini.
- Pemusnah tidak boleh membuang pengecualian.
- Jika pengecualian berlaku semasa objek pembinaan, memori asas dikeluarkan sebelum pengecualian dibuang.
Pemusnahan Objek Manual
Memandangkan C tidak mempunyai pengumpul sampah, objek dinamik mesti dilepaskan secara manual untuk mengelakkan kebocoran sumber.
Pintar Penunjuk
-
Petunjuk Pintar Mengira Rujukan (std::shared_ptr): Musnahkan objek asas secara automatik apabila std::shared_ptr terakhir yang merujuknya dimusnahkan.
Atas ialah kandungan terperinci Bagaimanakah Pemusnahan Objek Berfungsi 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