java - 是否类 类型指针、引用作为形参 ,函数结束不会自动析构类?
PHP中文网
PHP中文网 2017-04-18 10:51:17
0
3
821

自动析构是在作用域结束时析构作用域里创建的类对象的吗?

PHP中文网
PHP中文网

认证0级讲师

membalas semua(3)
左手右手慢动作

Jika objek diperoleh menggunakan penunjuk new, ia mestilah secara manual delete Pemusnah tidak akan memusnahkannya secara automatik untuk anda, seperti std::string* s = new std::string; Jika ini adalah rentetan yang dibina dalam kelas, ini kelas s akan dikitar semula, tetapi ruang yang ditunjukkan oleh s tidak akan dikitar semula anda hanya perlu ingat bahawa rujukan itu sebenarnya adalah alias dan anda boleh membuat pertimbangan anda sendiri

阿神

Saya tidak sepatutnya bercakap banyak, dan saya tidak memahaminya dengan betul.

Pada penghujung fungsi, hanya pembolehubah automatik yang diisytiharkan dalam badan fungsi dan parameter formal fungsi akan dimusnahkan (dimusnahkan), dan objek yang mereka rujuk (jika ada) tidak akan dimusnahkan dengan kemusnahannya . Objek yang dirujuk oleh penunjuk/rujukan mempunyai tempoh penyimpanan bebasnya sendiri Apabila objek ini dimusnahkan bergantung pada tempoh penyimpanannya sendiri.

Apa yang anda tanya dalam soalan anda ialah apabila pemusnah dipanggil secara tersirat. Panggilan tersirat kepada pemusnah juga bergantung pada tempoh penyimpanan objek. Ringkasnya, jika objek dibina, pemusnahnya akan dipanggil apabila ia dimusnahkan.

12.3.2.11 Pemusnah dipanggil secara tersirat
— untuk objek yang dibina dengan tempoh storan statik (3.7.1) pada penamatan program (3.6.3),
— untuk objek yang dibina dengan tempoh penyimpanan benang ( 3.7.2) di pintu keluar benang,
— untuk objek yang dibina dengan tempoh penyimpanan automatik (3.7.3) apabila blok di mana objek dicipta keluar (6.7),
— untuk objek sementara yang dibina apabila sepanjang hayat objek sementara berakhir (12.2),
— untuk objek terbina yang diperuntukkan oleh ungkapan baharu (5.3.4), melalui penggunaan ungkapan padam (5.3.5),
— dalam beberapa situasi disebabkan oleh pengendalian pengecualian (15.3).


Mengenai petikan:

Rujukan bukan objek, tetapi ia juga mempunyai tempoh penyimpanan (tempoh penyimpanan dikenakan pada mana-mana pembolehubah). Peraturan pemusnahan untuk tempoh penyimpanan juga digunakan untuk rujukan.
Tetapi saya tidak menemui penerangan yang tepat tentang perkara yang berlaku apabila rujukan dimusnahkan. Tepat bagaimana rujukan dimusnahkan harus bergantung pada pelaksanaan pengkompil. Keadaan umum sepatutnya: jika rujukan menduduki ruang simpanan semasa pelaksanaan, ruang itu akan dituntut semula. Tanpa pemilikan, tiada apa yang berlaku. (Parameter formal jenis rujukan sering menduduki ruang storan apabila fungsi tidak sebaris)

3.7.3 Kategori tempoh penyimpanan juga digunakan untuk rujukan

8.3.2.4 Tidak dinyatakan sama ada rujukan memerlukan storan atau tidak.

3.9.8 Jenis objek ialah jenis (kemungkinan kelayakan cv) yang bukan jenis fungsi, bukan jenis rujukan dan bukan jenis void.

1.8 [...] Objek ialah kawasan storan [ Nota: Fungsi bukan objek, tidak kira sama ada ia menduduki storan dengan cara yang dilakukan oleh objek ] [... ]

刘奇

1. Pemusnah diperkenalkan oleh C++ untuk kelas Ia adalah fungsi yang dipanggil selepas kitaran hayat pembolehubah kelas tamat dan sebelum ruang dikitar semula.
2. Penunjuk kelas dan rujukan kelas (penunjuk tetap yang menunjuk kepada pembolehubah) hanyalah jenis data asas (penunjuk tiada pemusnah yang sepadan akan dikitar semula selepas panggilan fungsi selesai).
3. Jika parameter yang diluluskan ialah objek kelas, seperti yang dinyatakan dalam titik pertama, pemusnah akan dipanggil sebelum ruang dikitar semula.
4. Semua pembolehubah kelas pada tindanan akan dimusnahkan secara automatik selepas kitaran hayat tamat, tetapi pembolehubah kelas pada timbunan (diperuntukkan oleh operasi seperti baharu) tidak akan dan perlu dikeluarkan secara manual untuk mencetuskan panggilan pemusnah .

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan