Articles of movimiento semántica

¿Cómo transfiere std :: move () valores a RValues?

Simplemente me encontré no comprendiendo completamente la lógica de std::move() . Al principio, busqué en Google, pero parece que solo hay documentos sobre cómo usar std::move() , no cómo funciona su estructura. Quiero decir, sé cuál es la función del miembro de la plantilla, pero cuando miro en la definición de std::move() en VS2010, sigue […]

¿Es posible :: mover objetos de las funciones? (C ++ 11)

Este progtwig intenta mover una cadena de una función y usarla para la construcción de otra cadena: #include #include #include std::string && Get_String(void); int main(){ std::string str{Get_String()}; std::cout << str << std::endl; return 0; } std::string && Get_String(void){ std::string str{"hello world"}; return std::move(str); } El progtwig comstack, pero segfaults en la ejecución. Este fue mi […]

C ++ 11 move constructor no llamado, se prefiere el constructor predeterminado

Supongamos que tenemos esta clase: class X { public: explicit X (char* c) { cout<<"ctor"<<endl; init(c); }; X (X& lv) { cout<<"copy"<<endl; init(lv.c_); }; X (X&& rv) { cout<<"move"<<endl; c_ = rv.c_; rv.c_ = nullptr; }; const char* c() { return c_; }; private: void init(char *c) { c_ = new char[strlen(c)+1]; strcpy(c_, c); }; […]

¿Por qué std :: move previene RVO?

En muchos casos, al devolver un local desde una función, RVO entra en acción. Sin embargo, pensé que el uso explícito de std::move al menos impondría la mudanza cuando no ocurra el RVO, pero ese RVO aún se aplica cuando es posible. Sin embargo, parece que este no es el caso. #include “iostream” class HeavyWeight […]

¿Qué garantiza la biblioteca estándar sobre la asignación de movimiento automático?

¿Qué dice el estándar C ++ 11 sobre la asignación del movimiento personal en relación con la biblioteca estándar? Para ser más concretos, ¿qué se garantiza, en todo caso, sobre lo que hace selfAssign ? template std::vector selfAssign(std::vector v) { v = std::move(v); return v; }

¿Por qué usas std :: move cuando tienes && en C ++ 11?

Posible duplicado: ¿Alguien puede explicarme la semántica del movimiento? Recientemente asistí a un seminario de C ++ 11 y recibí el siguiente consejo. when you have && and you are unsure, you will almost always use std::move ¿Podría alguien explicarme por qué debería usar std::move en lugar de algunas alternativas y algunos casos en los […]

¿Cómo implementar realmente la regla de cinco?

ACTUALIZAR en la parte inferior q1: ¿Cómo implementaría la regla de cinco para una clase que maneja recursos bastante pesados, pero de los cuales quiere que se transmita por valor porque eso simplifica y embellece su uso? ¿O no son necesarios los cinco elementos de la regla? En la práctica, estoy comenzando algo con imágenes […]

¿Por qué copiamos y luego nos movemos?

Vi un código en el que alguien decidió copiar un objeto y luego moverlo a un miembro de datos de una clase. Esto me dejó en la confusión en que pensé que todo el punto de movimiento era evitar copiar. Aquí está el ejemplo: struct S { S(std::string str) : data(std::move(str)) {} }; Aquí están […]

¿El vector movido siempre está vacío?

Sé que, en general, la norma impone pocos requisitos sobre los valores que se han movido de: N3485 17.6.5.15 [lib.types.movedfrom] / 1: Los objetos de tipos definidos en la biblioteca estándar de C ++ se pueden mover desde (12.8). Las operaciones de movimiento pueden especificarse explícitamente o generarse implícitamente. A menos que se especifique lo […]

¿Reutilizando un contenedor movido?

¿Cuál es la forma correcta de reutilizar un contenedor movido? std::vector container; container.push_back(1); auto container2 = std::move(container); // ver1: Do nothing //container2.clear(); // ver2: “Reset” container = std::vector() // ver3: Reinitialize container.push_back(2); assert(container.size() == 1 && container.front() == 2); De lo que he leído en el borrador estándar de C ++ 0x; ver3 parece ser […]