Rumah >pembangunan bahagian belakang >C++ >Adakah `goto` Melangkau Panggilan Pemusnah dalam C ?
Bolehkah goto Melompat Merentasi Kod Tanpa Menyebut Pemusnah?
Soalan: Adakah benar goto jump boleh memintas kod bahagian tanpa melaksanakan pemusnah?
Contoh: Pertimbangkan kod berikut:
void f() { int x = 0; goto lol; } int main() { f(); lol: return 0; }
Adakah objek x akan dipadamkan selepas lompat goto?
Jawapan:
Tidak, objek x tidak akan bocor.
Kepercayaan ini adalah tanggapan yang salah. goto jumps tidak memintas mekanisme skop C dan pemusnah dipanggil seperti yang dijangkakan.
1. Skop Label:
Pernyataan Goto tidak boleh merentasi sempadan fungsi. Skop label adalah terhad kepada fungsi yang ditakrifkan.
2. Permulaan Objek:
Lompatan masuk tidak boleh memintas pemulaan objek. Percubaan untuk melompat melepasi objek yang tidak dimulakan akan mengakibatkan ralat pengkompil. Begitu juga, melompat kembali melintasi objek yang dimulakan akan menyebabkan kejadian sebelumnya dimusnahkan.
3. Skop Objek:
Objek dengan tempoh storan automatik tidak bocor apabila lompat goto keluar dari skopnya. C memastikan objek dimusnahkan dalam susunan terbalik pembinaannya apabila keluar dari skop.
Kesimpulan:
Goto melompat menghormati sepenuhnya skop dan peraturan pemusnahan C . Anda tidak boleh menggunakan goto untuk memintas mekanisme ini dan menyebabkan kebocoran memori. Walau bagaimanapun, masih tidak digalakkan untuk menggunakan goto secara berlebihan kerana ia boleh menyebabkan kod yang sukar difahami dan diselenggara.
Atas ialah kandungan terperinci Adakah `goto` Melangkau Panggilan Pemusnah dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!