Menggunakan Semula Bekas Alih: Pendekatan Yang Betul
Topik penggunaan semula bekas yang dialihkan dalam C telah mencetuskan perbincangan. Artikel ini meneroka kaedah yang betul untuk mengendalikan situasi sedemikian.
Pertimbangkan coretan kod berikut:
std::vector<int> container; container.push_back(1); auto container2 = std::move(container); // ver1: Do nothing //container2.clear(); // ver2: "Reset" container = std::vector<int>() // ver3: Reinitialize container.push_back(2); assert(container.size() == 1 && container.front() == 2);
Menurut draf standard C 0x, ver3 nampaknya merupakan pendekatan yang diutamakan sejak pemindahan objek berada dalam "keadaan yang sah tetapi tidak ditentukan." Untuk menjelaskan konsep ini, mari rujuk definisi dalam piawai:
[defns.valid] §17.3.26 valid but unspecified state an object state that is not specified except that the object’s invariants are met and operations on the object behave as specified for its type
Ini bermakna objek yang dialihkan masih hidup dan boleh dikendalikan seperti biasa, tidak termasuk tindakan dengan prasyarat (melainkan prasyarat disahkan terlebih dahulu).
Sebagai contoh, operasi clear() tidak mempunyai prasyarat. Dengan menggunakan clear(), bekas itu ditetapkan semula kepada keadaan yang ditentukan, membolehkan penggunaannya yang seterusnya.
Oleh itu, cara yang betul untuk menggunakan semula bekas yang dialihkan adalah dengan melakukan operasi clear(), seperti yang ditunjukkan dalam ver2 dalam coretan kod. Pendekatan ini memastikan bekas dipulihkan kepada keadaan yang diketahui dan konsisten.
Atas ialah kandungan terperinci Bagaimana Anda Harus Menggunakan Semula Bekas Beralih dengan Betul dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!