首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误使用std::move()?

错误使用std::move()?
EN

Stack Overflow用户
提问于 2013-12-30 18:20:22
回答 1查看 258关注 0票数 1

下面是代码块,我是如何通过游戏选项实现链接列表来遍历currentElem指针的。这段代码运行良好。但是,只是为了测试目的,我从OptionElem-Class的析构函数中写入了一个LogFile,这样我就可以计算出总共实例化了多少OptionElem对象。日志文件中有9个入口。因此,有9个对象被实例化和销毁。我只期望3个对象(e1、e2和e3),因为我在GameState构造函数中实例化了它们一次,然后将它们移动到optionElems。我不明白其他6个OptionElem对象是在哪里被实例化的。

代码语言:javascript
运行
复制
#include "OptionElem.h"
#include <vector>
class GameState
    {
    std::vector<OptionElem> optionElems;
    OptionElem*        currentElem; 
    public:
    GameState(); 
    };

GameState::GameState()
    {
    OptionElem e1("Start Game"); 
    optionElems.push_back(std::move(e1)); 
    OptionElem e2("Options");
    optionElems.push_back(std::move(e2));   
    OptionElem e3("Exit");
    optionElems.push_back(std::move(e3));

    optionElems[0].Connect(optionElems[1]);
    optionElems[1].Connect(optionElems[2]);

    currentElem = &optionElems[0];
    }

编辑:我把台词改了

代码语言:javascript
运行
复制
OptionElem e1("Start Game"); 
optionElems.push_back(std::move(e1)); 

至:

代码语言:javascript
运行
复制
optionElems.emplace_back("Start Game"); 

并按照sftrabbit的建议对下面类似的代码做了相同的更改,日志文件更改为3个条目,因此只有3个OptionElem对象在使用emplace_back方法时被实例化,而不是将局部变量移动到向量。我认为这更有效,因为为同一操作实例化的对象较少(将它们添加到向量中)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-30 18:22:40

移动物体并不会使物体神奇地消失。它只是窃取对象的内容(如果适当地实现了move构造函数,也就是),以便放入新对象。原来的物体仍然存在,最终应该被摧毁,而每一次移动都需要建造另一个物体,最终也会被摧毁。

也许这是“移动”这个词的问题。它实际上并不涉及在内存中移动对象-它真正涉及的是将对象的内容移动到新对象。

无论如何,您可能对构造向量元素的emplace_back函数感兴趣:

代码语言:javascript
运行
复制
optionElems.emplace_back("Start Game");
optionElems.emplace_back("Options");
optionElems.emplace_back("Exit");

甚至只是像这样初始化您的std::vector

代码语言:javascript
运行
复制
std::vector<OptionElem> optionElems = {"Start Game", "Options", "Exit"};

关于命名约定的一个简短说明:调用集合somethingElems是在名称中放置有关类型的信息。您只需将其命名为options,很明显,它有元素,因为它是复数的(不用说Elems)。那么currentElem将被称为currentOption,这是更容易理解的,对吗?

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20845166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档