Rumah >pembangunan bahagian belakang >C++ >Bagaimana Anda Harus Menggunakan Semula Bekas C Beralih?

Bagaimana Anda Harus Menggunakan Semula Bekas C Beralih?

Linda Hamilton
Linda Hamiltonasal
2024-12-04 19:58:11716semak imbas

How Should You Reuse a Moved C   Container?

Menggunakan Semula Bekas Yang Dipindah: Memastikan Gelagat Betul

Apabila bekas dialihkan, ia diletakkan dalam "keadaan sah tetapi tidak ditentukan" mengikut draf standard C 0x . Dalam keadaan sedemikian, adalah penting untuk memahami cara menggunakan semula bekas yang dialihkan dengan betul.

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 standard, pilihan ver3, yang melibatkan pemulaan semula bekas yang dipindahkan, adalah pendekatan yang betul. Ini kerana, selepas operasi bergerak, objek diletakkan dalam keadaan tidak ditentukan.

Standard mentakrifkan "keadaan sah tetapi tidak ditentukan" seperti berikut:

"keadaan objek yang tidak ditentukan kecuali invarian objek dipenuhi dan operasi pada objek berkelakuan seperti yang ditentukan untuk jenisnya"

Ini bermakna bahawa dialih-dari objek kekal hidup dan boleh dikendalikan, tetapi hanya jika prasyarat dipenuhi. Dalam kes vektor, mengosongkan bekas dengan clear() tidak mempunyai prasyarat dan mengembalikannya kepada keadaan yang diketahui.

Oleh itu, pengesyoran adalah menggunakan clear() untuk menetapkan semula bekas yang dialihkan dan kembalikannya kepada keadaan yang boleh digunakan.

Pilihan ver2, yang melibatkan panggilan clear() pada bekas yang dialihkan, juga sah. Walau bagaimanapun, ini mungkin membawa kepada pengoptimuman dengan menganggap bekas yang dialihkan itu kosong. Menggunakan clear() memastikan bahawa bekas dikembalikan ke keadaan yang diketahui, tanpa mengira pengoptimuman.

Pilihan ver1, yang tidak melakukan apa-apa, tidak disyorkan. Ini kerana bekas berada dalam keadaan tidak ditentukan selepas dialihkan dan mungkin menunjukkan tingkah laku yang tidak dijangka.

Atas ialah kandungan terperinci Bagaimana Anda Harus Menggunakan Semula Bekas C Beralih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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