所以,我正在为Qub3d引擎制作游戏经理课程,我希望每个GameState
都是std::unique_ptr
我拥有的每个GameState(例如mainMenu
)都是GameState
我需要std::list(or something)
为每个州包含不同的unique_ptrs,例如mainMenu
和mainGame
。
我已经尝试了std::list< std::unique_ptr<GameState> > stateStack;
,但是当我尝试这样做时:stateStack.push_back(m_mainMenu);
我收到有关重载的C2664错误,不包括mainMenu类。 (不知道这是否相关,但我使用的是MSVC)
我将如何做到这一点? 这甚至可能吗?
答案 0 :(得分:2)
这绝对可能,但你需要改变你对这个指针的看法。
unique_ptr
意味着保证只有一个指向对象的指针。它管理它指向的对象的生命周期,从而有助于防止可能的内存错误和错误。
因此,unique_ptr
应该在其生存的上下文中定义。您不能只是随机指向数据结构,并让它成为 std::vector
。
在emplace_back()
的条款中,您可以将new
函数与push_back()
运算符结合使用。此函数实际上处理相关对象的初始化,而不是std::vector<std::unique_ptr<Dog>> dogshow;
dogshow.emplace_back(new Dog());
dogshow[0]->speak(); // outputs "woof", consistent with my Dog class.
,它只将现有对象添加到数据结构中。
emplace_back
很简单,unique_ptr
函数接管了std::list
的声明。
如果您绝对想要使用emplace
,那么它会提供类似的unique_ptr
功能。许多C ++标准数据结构都可以。
注意:如果您想要shared_ptr
的智能内存管理,但希望拥有指向同一对象的多个指针,则应该查看--output-file
。