【发布时间】:2014-01-17 21:57:28
【问题描述】:
我将发布我的代码然后解释我的查询:
typedef std::shared_ptr<SEntity> Entity;
//Scene_Ids is an enum
static std::map<Scene_Ids, std::vector<Entity> > m_scene_entities;
std::shared_ptr<SEntity>& SEntityManager::getEntity(const std::string& entity_name)
{
int counter = 0;
for (auto iter = m_scene_entities.begin(); iter != m_scene_entities.end(); ++iter)
{
if (iter->second[counter]->getId() == entity_name)
return iter->second[counter];
counter++;
}
//What would I return if the entity couldn't be found?
}
代码基本上说明了一切。我有一个方法,如果在地图内的 std::vector 中找到“实体”,它将返回对 std::shared_ptr 类型的引用。但是,由于我没有返回指针,因此无法返回 nullptr。在失败的情况下我可以返回什么。
另外,我知道 std::shared_ptr 是为了在几个不同的地方有副本。为此,我真的需要返回一个引用还是可以按值返回它?
谢谢!
【问题讨论】:
-
您能否将
shared_ptr退回给nullptr? -
这不是和
std::map::findvsstd::map::operator[]一样的问题吗? -
@templatetypedef OP 正在返回一个引用。
-
@dyp 啊,错过了。谢谢!
-
您是否需要修改 std::shared_ptr 对象本身或保存在其中的对象?答案取决于那个
标签: c++ pointers reference std shared-ptr