Preguntas etiquetadas con move-semantics

4
¿Por qué copiamos y luego nos movemos?
Vi código en algún lugar en el que alguien decidió copiar un objeto y luego moverlo a un miembro de datos de una clase. Esto me dejó confuso porque pensé que el objetivo de mudarse era evitar copiar. Aquí está el ejemplo: struct S { S(std::string str) : data(std::move(str)) {} …

8
initializer_list y mover semántica
¿Puedo sacar elementos de 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? } } Dado que std::intializer_list<T>requiere atención especial del compilador y no tiene una semántica de valor como los contenedores normales de …

5
¿Puedo inicializar en lista un vector de tipo de solo movimiento?
Si paso el siguiente código a través de mi instantánea de GCC 4.7, intenta copiar los unique_ptrs en el vector. #include <vector> #include <memory> int main() { using move_only = std::unique_ptr<int>; std::vector<move_only> v { move_only(), move_only(), move_only() }; } Obviamente, eso no puede funcionar porque std::unique_ptrno se puede copiar: error: …



2
Eficiencia de C ++ 11 push_back () con std :: move versus emplace_back () para objetos ya construidos
En C ++ 11 emplace_back()generalmente se prefiere (en términos de eficiencia) push_back()porque permite la construcción en el lugar, pero ¿sigue siendo así cuando se usa push_back(std::move())con un objeto ya construido? Por ejemplo, ¿ emplace_back()todavía se prefiere en casos como el siguiente? std::string mystring("hello world"); std::vector<std::string> myvector; myvector.emplace_back(mystring); myvector.push_back(std::move(mystring)); // (of …

3
¿Reutilizando un contenedor movido?
¿Cuál es la forma correcta de reutilizar un contenedor movido? 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); Por lo que he leído en el borrador estándar C ++ …


4
¿Robar recursos de std :: claves del mapa permitidas?
En C ++, ¿está bien robar recursos de un mapa que ya no necesito? Más precisamente, suponga que tengo un std::mapcon std::stringclaves y quiero construir un vector a partir de él robando los recursos de las mapteclas s usando std::move. Tenga en cuenta que dicho acceso de escritura a las …
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.