initializer_list-Initialization of Vectors with Move-Only Types
Dalam C , apabila cuba menyenaraikan-memulakan vektor dengan unsur-unsur pergerakan -only type, seperti std::unique_ptr, pengkompil mungkin tersalah cuba menyalin elemen bukannya memindahkan mereka. Isu ini boleh diatasi menggunakan pelbagai teknik:
Pembungkus Perantaraan
Untuk mengelakkan salinan, jenis pembalut boleh digunakan untuk memegang nilai bergerak sahaja sebagai rujukan. Kelas rref_wrapper menunjukkan pendekatan ini dengan membungkus nilai bergerak sahaja dan menyediakan operator untuk mengekstrak nilai asas. Ini membolehkan nilai dialihkan ke dalam vektor tanpa menyalin.
Contoh:
std::initializer_list<rref_wrapper<std::unique_ptr<int>>> il{ rref(std::make_unique<int>()), rref(std::make_unique<int>()), rref(std::make_unique<int>()) }; std::vector<std::unique_ptr<int>> v(il.begin(), il.end());
std::make_move_iterator
Kaedah lain melibatkan penggunaan std::make_move_iterator untuk mencipta iterator yang, apabila dinyahrujuk, alihkan elemen yang ditunjuk. Ini menghapuskan keperluan untuk kelas pembalut.
Contoh:
std::unique_ptr<int> init[] = { std::make_unique<int>(), std::make_unique<int>(), std::make_unique<int>() }; std::vector<std::unique_ptr<int>> v{ std::make_move_iterator(std::begin(init)), std::make_move_iterator(std::end(init)) };
Dengan menggunakan teknik ini, anda boleh menyenaraikan-memulakan vektor dengan jenis bergerak sahaja , memastikan pemindahan pemilikan yang cekap dan betul.
Atas ialah kandungan terperinci Bagaimana untuk Menyenaraikan-Memulakan Vektor dengan Jenis Alih Sahaja dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!