Adakah Pernyataan `goto` Memintas Pemusnah Objek dalam C ?

Susan Sarandon
Lepaskan: 2024-11-27 19:06:11
asal
582 orang telah melayarinya

Do `goto` Statements Bypass Object Destructors in C  ?

Bolehkah Penyata 'goto' Merentas Sempadan Fungsi Tanpa Memanggil Pemusnah?

Adalah lazimnya dipercayai bahawa lompat goto memintas pelaksanaan kod yang teratur , termasuk pemusnahan objek. Walau bagaimanapun, ini adalah salah tanggapan yang berpunca daripada salah faham peraturan skop C.

Skop Label

Pertama, lompatan goto terhad dalam skop mereka fungsi masing-masing. Melompat merentasi sempadan fungsi, seperti dalam contoh yang anda berikan, tidak mungkin. Pengkompil akan mengeluarkan ralat yang menunjukkan bahawa label tidak ditakrifkan dalam fungsi tempat lompatan berasal.

Permulaan dan Skop Objek

Kedua, lompatan goto tidak boleh melintasi permulaan objek. Jika lompatan dibuat melepasi titik di mana objek diisytiharkan dan dimulakan, skop objek dimasukkan, dan pembinanya dipanggil. Walau bagaimanapun, jika lompatan dibuat semula ke dalam skop objek yang telah dimulakan, pemusnahnya akan dipanggil sebelum lompatan dilaksanakan.

Pemeliharaan Skop Objek

Akhir sekali, objek dengan tempoh storan automatik (iaitu, pembolehubah yang diisytiharkan dalam blok) tidak dibocorkan oleh lompatan goto. Meninggalkan skop objek melalui goto mencetuskan kemusnahannya, memastikan pengurusan sumber dikendalikan dengan betul.

Kesimpulan

Bertentangan dengan kepercayaan popular, pernyataan goto dalam C tidak membenarkan untuk lompatan tidak terkawal yang melanggar peraturan skop atau mengakibatkan kebocoran ingatan. Walaupun penggunaan goto masih boleh dipertikaikan atas sebab reka bentuk, ia tidak menimbulkan risiko sedia ada yang sering dikaitkan dengannya.

Atas ialah kandungan terperinci Adakah Pernyataan `goto` Memintas Pemusnah Objek dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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