Bilakah Argumen Fungsi Sementara Mati?
Dalam C , apabila objek sementara dicipta sebagai argumen kepada fungsi, pengkompil secara automatik menguruskan sepanjang hayatnya. Ini menimbulkan persoalan: pada titik manakah pemusnah objek sementara dijamin dipanggil?
Menurut piawaian C, objek sementara dimusnahkan pada akhir ungkapan penuh yang menjadi sebahagian daripadanya. Di sini, ungkapan penuh ialah ungkapan yang bukan sub-ungkapan bagi ungkapan lain. Ia biasanya berakhir pada koma bernoktah (;) atau kurungan penutup () bagi pernyataan aliran kawalan (cth., jika, sambil, suis).
Dalam contoh yang disediakan:
class MyClass { MyClass(int a); }; myFunction(MyClass(42));
The objek MyClass sementara yang dicipta sebagai hujah fungsi akan dimusnahkan selepas penyataan panggilan fungsi tamat, iaitu, apabila koma bertitik ditemui. Oleh itu, anda boleh mengandaikan bahawa pemusnah akan dipanggil sebelum sebarang pernyataan berikutnya dilaksanakan.
Perlu diingat bahawa jangka hayat sementara boleh dilanjutkan menggunakan rujukan const. Dengan mengikat sementara kepada rujukan const, hayatnya dilanjutkan untuk memadankan rujukan:
MyClass getMyClass(); { const MyClass& r = getMyClass(); // full expression ends here ... } // object returned by getMyClass() is destroyed here
Teknik ini boleh menyimpan pembinaan salinan yang tidak perlu sambil mengekalkan nilai yang dikembalikan oleh fungsi, terutamanya apabila pengoptimuman nilai pulangan tidak terpakai. Walau bagaimanapun, dengan kemunculan semantik bergerak dalam C 11, utilitinya telah berkurangan sedikit.
Atas ialah kandungan terperinci Bilakah Tepat Adakah Argumen Fungsi Sementara C Dimusnahkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!