Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menggunakan Semula Bekas Bergerak dengan Selamat dalam C 0x?

Bagaimana untuk Menggunakan Semula Bekas Bergerak dengan Selamat dalam C 0x?

DDD
DDDasal
2024-12-02 16:24:12593semak imbas

How to Safely Reuse a Moved Container in C  0x?

Menggunakan Semula Bekas Yang Dipindah: Meneroka Draf Piawai C 0x

Persoalan yang timbul bertujuan untuk menjelaskan kaedah yang betul untuk menggunakan semula bekas yang dialihkan dalam C . Menurut draf standard C 0x, objek dalam "keadaan sah tetapi tidak ditentukan" membenarkan operasi yang tidak memerlukan prasyarat melainkan prasyarat tersebut disahkan terlebih dahulu.

Pertimbangkan coretan kod yang disediakan:

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

Bekas vektor dialihkan ke bekas2, meninggalkan bekas dalam keadaan tidak ditentukan. Mengikut piawaian, negeri ini membenarkan operasi tanpa prasyarat. Oleh itu, memanggil clear pada container2 (versi 2) akan mengembalikannya kepada keadaan yang diketahui.

Sebagai alternatif, memulakan semula bekas menggunakan versi 3 juga akan mencapai hasil yang diingini. Kaedah ini lebih bulat tetapi membenarkan potensi pengoptimuman. Walau bagaimanapun, ia juga boleh membawa kepada kesilapan.

Oleh itu, kaedah yang betul untuk menggunakan semula bekas yang dialihkan adalah sama ada mengosongkannya atau memulakannya semula. Versi 2 lebih disukai kerana ia secara eksplisit menetapkan semula bekas kepada keadaan yang diketahui dan mengelakkan kemungkinan perangkap yang dikaitkan dengan versi 3.

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Semula Bekas Bergerak dengan Selamat dalam C 0x?. 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