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!