Menguatkuasakan Semantik Alih semasa Peluasan Vektor
Dalam situasi di mana std::vector mengandungi objek dengan kedua-dua pembina salinan dan gerakkan, ia mungkin wajar untuk menguatkuasakan penggunaan pembina bergerak apabila vektor mengembang. Ini memastikan pengurusan memori yang cekap dan menghalang penyalinan yang tidak perlu.
Masalah:
A std::vektor objek kelas A akan menggunakan pembina salinan A( const A& ) apabila membesarkan saiznya melalui push_back. Walau bagaimanapun, adalah diingini untuk memanfaatkan pembina bergerak A(A&&) sebaliknya.
Penyelesaian:
Untuk membolehkan penggunaan pembina bergerak semasa pengembangan vektor, perkara berikut langkah perlu:
Contoh:
Kod berikut menunjukkan gerakkan pelaksanaan pembina yang diiktiraf oleh std::vector:
A(A &&rhs) noexcept { std::cout << "i am the move constr" << std::endl; ... some code doing the move ... m_value=std::move(rhs.m_value) ; // etc... }
Dengan mengisytiharkan dan melaksanakan pembina bergerak sebagai noexcept, std::vector akan dapat menggunakannya apabila membesarkan saiznya.
Pertimbangan Tambahan:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memaksa std::vector untuk Menggunakan Move Semantics Semasa Peluasan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!