O que é std::move() e quando usá-lo em C++?
Olá, colegas! Recentemente comecei a estudar C++11 e me deparei com std::move(). Li a documentação, mas não entendi completamente o que é essa fera e para que serve. Tenho este código:
```cpp
#include
#include
#include
class MyClass {
public:
std::string data;
MyClass(const std::string& str) : data(str) {}
};
int main() {
std::vector vec;
std::string bigString = "uma string muito longa que ocupa muita memória...";
// Opção 1: apenas adicionamos
MyClass obj1(bigString);
vec.push_back(obj1);
// Opção 2: usamos std::move
MyClass obj2(bigString);
vec.push_back(std::move(obj2));
return 0;
}
```
Eu entendo que std::move() está de alguma forma relacionado a mover, não copiar dados. Mas qual é a diferença? Quando devo usar std::move() e quando é melhor evitar? E o que acontece com o objeto original após a movimentação? Expliquem, por favor, com exemplos simples como isso funciona.