Domande taggate «move-semantics»

4
Perché copiamo e poi ci spostiamo?
Ho visto del codice da qualche parte in cui qualcuno ha deciso di copiare un oggetto e successivamente spostarlo in un membro dati di una classe. Questo mi ha lasciato confuso in quanto pensavo che il punto centrale dello spostamento fosse evitare di copiare. Ecco l'esempio: struct S { S(std::string …

8
initializer_list e sposta la semantica
Posso spostare elementi da un 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? } } Poiché std::intializer_list<T>richiede un'attenzione speciale da parte del compilatore e non ha una semantica dei valori come i normali contenitori …

5
Posso inizializzare da elenco un vettore di tipo solo spostamento?
Se passo il codice seguente attraverso la mia istantanea GCC 4.7, prova a copiare i messaggi di posta unique_ptrelettronica nel vettore. #include <vector> #include <memory> int main() { using move_only = std::unique_ptr<int>; std::vector<move_only> v { move_only(), move_only(), move_only() }; } Ovviamente non può funzionare perché std::unique_ptrnon è copiabile: errore: utilizzo …


2
Efficienza di C ++ 11 push_back () con std :: move rispetto a emplace_back () per oggetti già costruiti
In C ++ 11 emplace_back()è generalmente preferito (in termini di efficienza) in push_back()quanto consente la costruzione sul posto, ma è ancora così quando si utilizzapush_back(std::move()) con un oggetto già costruito? Ad esempio, è emplace_back()ancora preferito in casi come i seguenti? std::string mystring("hello world"); std::vector<std::string> myvector; myvector.emplace_back(mystring); myvector.push_back(std::move(mystring)); // (of course …

3
Riutilizzare un contenitore spostato?
Qual è il modo corretto per riutilizzare un contenitore spostato? 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); Da quello che ho letto nella bozza standard C ++ 0x; …

4
Rubare risorse dalle chiavi di std :: map è permesso?
In C ++, va bene rubare risorse da una mappa che non mi serve più in seguito? Più precisamente, supponiamo che io abbia una std::mapcon le std::stringchiavi e che voglio costruirne un vettore rubando le risorse delle mapchiavi s usando std::move. Si noti che tale accesso in scrittura alle chiavi …
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.