cari

Rumah  >  Soal Jawab  >  teks badan

java - 是否类 类型指针、引用作为形参 ,函数结束不会自动析构类?

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

PHP中文网PHP中文网2881 hari yang lalu845

membalas semua(3)saya akan balas

  • ringa_lee

    ringa_lee2017-04-18 10:53:17

    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

    balas
    0
  • 阿神

    阿神2017-04-18 10:53:17

    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 ] [... ]

    balas
    0
  • 怪我咯

    怪我咯2017-04-18 10:53:17

    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 .

    balas
    0
  • Batalbalas