相关疑难解决方法(0)

为什么`std :: move`命名为`std :: move`?

C++ 11 std::move(x)函数根本不会移动任何东西.它只是一个转换为r值.为什么这样做?这不是误导吗?

c++ c++-faq rvalue-reference move-semantics c++11

120
推荐指数
2
解决办法
1万
查看次数

使用局部变量移动语义

我想知道从此示例中获取的以下代码:

是否可以 std::move 局部堆栈变量?

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)

c++ stack move

1
推荐指数
1
解决办法
1953
查看次数

标签 统计

c++ ×2

c++-faq ×1

c++11 ×1

move ×1

move-semantics ×1

rvalue-reference ×1

stack ×1