Rumah >pembangunan bahagian belakang >C++ >Adakah `goto` Melangkau Panggilan Pemusnah dalam C ?

Adakah `goto` Melangkau Panggilan Pemusnah dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-11-26 12:24:08437semak imbas

Does `goto` Skip Destructor Calls in 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!

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