【发布时间】:2014-07-21 08:33:19
【问题描述】:
我正在尝试为基于组件的系统中的实体编写管理类。我不确定如何继续将实体添加到此类中。我有几种方法可以做到这一点,但是我不确定正确的方法是什么。
第一种方法是将对象移动到管理器中。
void addEntity(Entity && in){
entities.emplace(std::move(in));
}
但是,我需要处理移动构造函数,这应该不会太难。
另一种方法是传入一个指针或std::unique_ptr。这样一来,我就不必担心所有权,因为它会使传入的指针无效。
void addEntity(std::unique_ptr<Entity> in){
entities.emplace(in);
}
但是,我不确定哪种方法更好。
【问题讨论】:
-
“将对象移入管理器”的真正含义是什么?为什么不简单地将对象的地址提供给经理并将其留在原处?
-
在没有更多上下文的情况下很难确定,但第一个对我来说似乎很好。考虑第二个的主要原因之一是如果您正在处理多态
Entity类型。 -
@wallyk 我希望经理拥有实体的所有权。我可能会从文件中读取这些实体,并将它们按顺序添加到管理器中,以便它们在需要时被销毁,否则会存在于其中。
-
@Praetorian Enttiy 不会是多态类型。
标签: c++ memory c++11 memory-management ownership