Pertanyaan yang diberi tag «move-semantics»

4
Mengapa kita menyalin lalu pindah?
Saya melihat kode di suatu tempat di mana seseorang memutuskan untuk menyalin objek dan kemudian memindahkannya ke anggota data kelas. Ini membuat saya bingung karena saya pikir inti dari pindah adalah untuk menghindari penyalinan. Berikut contohnya: struct S { S(std::string str) : data(std::move(str)) {} }; Inilah pertanyaan saya: Mengapa kita …

8
initializer_list dan pindahkan semantik
Apakah saya diperbolehkan untuk memindahkan elemen dari a std::initializer_list<T>? #include <initializer_list> #include <utility> template<typename T> void foo(std::initializer_list<T> list) { for (auto it = list.begin(); it != list.end(); ++it) { bar(std::move(*it)); // kosher? } } Karena std::intializer_list<T>memerlukan perhatian compiler khusus dan tidak memiliki nilai semantik seperti container normal dari pustaka standar …

5
Dapatkah saya menginisialisasi daftar vektor tipe hanya bergerak?
Jika saya meneruskan kode berikut melalui snapshot GCC 4.7 saya, ia mencoba menyalin unique_ptrs ke dalam vektor. #include <vector> #include <memory> int main() { using move_only = std::unique_ptr<int>; std::vector<move_only> v { move_only(), move_only(), move_only() }; } Jelas itu tidak dapat berfungsi karena std::unique_ptrtidak dapat disalin: kesalahan: penggunaan fungsi yang dihapus …

3
Bagaimana cara menerapkan semantik bergerak saat vektor tumbuh?
Saya memiliki std::vectorobjek dari kelas tertentu A. Kelas tidak sepele dan memiliki konstruktor salinan dan konstruktor bergerak yang ditentukan. std::vector<A> myvec; Jika saya mengisi vektor dengan Aobjek (menggunakan contoh myvec.push_back(a)), ukuran vektor akan bertambah, menggunakan konstruktor salinan A( const A&)untuk membuat salinan baru dari elemen dalam vektor. Dapatkah saya entah …

4
Mengapa tidak ada move-assignment / move-constructor?
Saya seorang programmer sederhana. Variabel anggota kelas saya paling sering terdiri dari tipe POD dan kontainer STL. Karena itu saya jarang harus menulis operator penugasan atau menyalin konstruktor, karena ini diterapkan secara default. Tambahkan ke ini, jika saya menggunakan std::movepada objek yang tidak dapat dipindahkan, ini menggunakan operator penugasan, artinya …

2
Efisiensi C ++ 11 push_back () dengan std :: move versus emplace_back () untuk objek yang sudah dibangun
Dalam C ++ 11 emplace_back()umumnya lebih disukai (dalam hal efisiensi) push_back()daripada karena memungkinkan konstruksi di tempat, tetapi apakah ini masih terjadi saat menggunakan push_back(std::move())dengan objek yang sudah dibangun? Misalnya, apakah emplace_back()masih disukai dalam kasus seperti berikut ini? std::string mystring("hello world"); std::vector<std::string> myvector; myvector.emplace_back(mystring); myvector.push_back(std::move(mystring)); // (of course assuming we don't …

4
Mencuri sumber daya dari std :: kunci peta diizinkan?
Dalam C ++, apakah boleh mencuri sumber daya dari peta yang tidak saya perlukan lagi? Lebih tepatnya, anggap saya punya kunci std::mapwith std::stringdan saya ingin membuat vektor dengan mencuri sumber daya mapkunci s yang digunakan std::move. Perhatikan bahwa akses tulis ke kunci merusak struktur data internal (pemesanan kunci) maptapi saya …
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.