Rumah >pembangunan bahagian belakang >C++ >Bilakah Pemusnah Objek C Sementara Dipanggil dalam Panggilan Fungsi?
Soalan:
Bilakah pemusnah untuk objek sementara dipanggil apabila ia berada dibuat dalam panggilan fungsi tetapi tidak digunakan sebagai parameter? Khususnya, pertimbangkan kod berikut:
class StringBuffer { public: StringBuffer(std::string & str) : m_str(str) { m_buffer.push_back(0); } ~StringBuffer() { m_str = &m_buffer[0]; } char * Size(int maxlength) { m_buffer.resize(maxlength + 1, 0); return &m_buffer[0]; } private: std::string & m_str; std::vector<char> m_buffer; }; std::string mystring; GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);
Jawapan:
Pemusnah untuk objek StringBuffer sementara dipanggil selepas panggilan ke GetString kembali.
Menurut Piawaian C (12.2 Objek sementara), hayat objek sementara berakhir pada penghujung ungkapan penuh yang (a) tidak dengan sendirinya muncul sebagai operan (kecuali dalam pembinaan objek kelas) dalam ungkapan penuh yang lain, dan (b) bukan sebahagian daripada ungkapan dalam kurungan.
Dalam kod contoh, panggilan ke GetString ialah ungkapan penuh dan objek StringBuffer sementara dibuat dalam ungkapan itu. Oleh itu, jangka hayat objek sementara tamat selepas panggilan ke GetString kembali.
Jaminan seumur hidup ini memastikan objek sementara kekal sah sehingga ia tidak diperlukan lagi. Ia membenarkan templat ungkapan menyimpan rujukan kepada objek sementara kerana sementara akan bertahan sehingga ungkapan dinilai sepenuhnya.
Atas ialah kandungan terperinci Bilakah Pemusnah Objek C Sementara Dipanggil dalam Panggilan Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!