C membolehkan penciptaan dan pemusnahan objek dalam pelbagai konteks. Memahami masa dan cara operasi ini berlaku adalah penting untuk pengurusan sumber yang berkesan dan mengelakkan kebocoran memori.
Objek Automatik (Pembolehubah Tempatan):
Objek automatik dimusnahkan dalam susunan terbalik definisinya apabila aliran kawalan keluar dari skopnya (fungsi, blok, dll.). Jika pengecualian dilemparkan semasa pelaksanaan fungsi, objek automatik dimusnahkan sebelum pengecualian disebarkan. Nota penting: Pemusnah objek automatik tidak boleh membuang pengecualian.
Objek Statik Bukan Setempat (Pembolehubah Global):
Objek statik yang ditakrifkan pada skop ruang nama ialah dimusnahkan selepas pelaksanaan main(), dalam susunan terbalik definisinya. Jika pengecualian meninggalkan pemusnah objek statik, std::terminate dipanggil.
Objek Statik Setempat:
Objek statik yang ditakrifkan dalam fungsi dibina apabila aliran kawalan memasuki takrifnya buat pertama kali. Mereka dimusnahkan selepas pelaksanaan main(), dalam susunan terbalik definisinya. Sekali lagi, pemusnah mereka tidak sepatutnya membuang pengecualian.
Subjek Kelas Asas dan Subjek Ahli:
Subjek ahli dimusnahkan dalam susunan terbalik takrifnya, diikuti dengan subobjek kelas asas dalam susunan senarai penentu asas. Pengecualian semasa pembinaan subobjek membawa kepada kemusnahan semua subobjek yang dibina sebelum ini sebelum menyebarkan pengecualian. Pemusnah bertanggungjawab untuk melepaskan sumber seperti fail, soket, dll.
Elemen tatasusunan dimusnahkan dalam tertib menurun. Pengecualian semasa pembinaan elemen membawa kepada kemusnahan elemen yang dibina sebelum ini sebelum menyebarkan pengecualian.
Objek sementara (dicipta semasa penilaian ungkapan prvalue) dimusnahkan apabila ungkapan penuh dinilai. Pengecualian semasa penilaian objek sementara membawa kepada pemusnahan sementara yang terdahulu. Jika rujukan setempat dimulakan dengan prvalue, jangka hayat objek sementara dilanjutkan ke skop rujukan, menghalang rujukan berjuntai.
Objek Dinamik (penunjuk) :
Objek dinamik yang dicipta dengan baharu dimusnahkan dengan memadam. Pelbagai kemusnahan, mengakses objek yang dimusnahkan atau memusnahkan dengan cara yang salah (cth., padam[]) mengakibatkan tingkah laku yang tidak ditentukan. Pengecualian semasa pembinaan objek dinamik membawa kepada pelepasan memori sebelum penyebaran pengecualian.
Anasusunan Dinamik:
Anasusunan dinamik yang dibuat dengan[] baharu dimusnahkan dengan pemadaman[]. Pelbagai kemusnahan, cara pemusnahan yang salah dan akses selepas pemusnahan membawa kepada tingkah laku yang tidak ditentukan. Pengecualian semasa pembinaan elemen tatasusunan membawa kepada kemusnahan elemen yang dibina sebelum ini dan pelepasan memori.
Petunjuk Pintar Mengira Rujukan:
Objek dinamik diurus oleh std::shared_ptr dimusnahkan apabila objek shared_ptr terakhir berkongsi objek dimusnahkan. Menggunakan penunjuk pintar membantu mengelakkan kebocoran memori dan memastikan pembersihan yang betul.
Atas ialah kandungan terperinci Bila dan Bagaimana Objek Dimusnahkan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!