Pemusnahan Objek Sementara dalam C
Memandangkan kod berikut:
#include <iostream> struct Foo { const char* m_name; ~Foo() { std::cout << m_name << '\n'; } }; int main() { Foo foo{"three"}; Foo{"one"}; // unnamed object std::cout << "two" << '\n'; }
Terbukti bahawa output akan menjadi "satu", "dua", dan "tiga." Ini menimbulkan persoalan: adakah tingkah laku ini dijamin merentasi semua pengkompil C?
Menurut piawaian C, dalam [class.temporary], ia menyatakan:
"Objek sementara dimusnahkan sebagai yang terakhir langkah dalam menilai ungkapan penuh yang (secara leksikal) mengandungi titik di mana ia dicipta."
Peraturan ini membayangkan bahawa sementara objek, seperti objek Foo yang tidak dinamakan dalam kod yang disediakan, akan dimusnahkan pada penghujung ungkapan penuh di mana ia dicipta, iaitu, koma bernoktah di hujung baris.
Adalah penting untuk ambil perhatian bahawa terdapat pengecualian kepada peraturan am ini, yang digariskan dalam [class.temporary] p5, p6 dan p7:
Walau bagaimanapun, dalam kod yang disediakan, tiada pengecualian ini digunakan, memastikan pemusnahan objek sementara yang terjamin pada penghujung ungkapan masing-masing.
Atas ialah kandungan terperinci Adakah Perintah Pemusnahan Objek Sementara Dijamin dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!