Rumah > pembangunan bahagian belakang > C++ > Bilakah Pemusnah Objek C Sementara Dipanggil dalam Panggilan Fungsi?

Bilakah Pemusnah Objek C Sementara Dipanggil dalam Panggilan Fungsi?

Mary-Kate Olsen
Lepaskan: 2024-12-13 11:57:14
asal
201 orang telah melayarinya

When is a Temporary C   Object's Destructor Called in a Function Call?

Dijamin Jangka Hayat Sementara dalam C

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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan