C++ 11 std::move(x)函数根本不会移动任何东西.它只是一个转换为r值.为什么这样做?这不是误导吗?
我想知道从此示例中获取的以下代码:
struct MyStruct
{
int iInteger;
string strString;
};
void MyFunc(vector<MyStruct>& vecStructs)
{
MyStruct NewStruct = { 8, "Hello" };
vecStructs.push_back(std::move(NewStruct));
}
int main()
{
vector<MyStruct> vecStructs;
MyFunc(vecStructs);
}
Run Code Online (Sandbox Code Playgroud)
我了解std::move()基本的工作原理,但在幕后有一些东西对我来说没有意义。
例如,如果NewStruct是在本地堆栈上创建的,如示例中所示。如果我在退出函数作用域之前使用移动语义来保存其数据免遭破坏,那么NewStruct被破坏就不会影响我的数据,这很好。但是这个信息不是还是放在栈里的吗?NewStruct如果我要再次扩展堆栈的使用,那么一旦堆栈增长并想要覆盖最初创建数据的位置,为什么这些信息不会面临被覆盖的危险呢?
添加第二个例子也许可以更好地表达我的观点:
void MyFunc(vector<char*> &vecCharPointers)
{
char* myStr = {'H', 'e', 'l', 'l', 'o'};
vecCharPointers.push_back(std::move(myStr));
}
int main()
{
vector<char*> vecCharPointers;
char* cp = nullptr;
}
Run Code Online (Sandbox Code Playgroud)