unique_ptr列表的内容不可访问

时间:2014-06-13 15:02:01

标签: c++ list unique-ptr

我有std::liststd::unique_ptrsEntity个对象。当我尝试循环遍历它们时,程序会说列表中的项目是不可访问的。该列表是一个成员变量,声明为private:list< unique_ptr>。

void EntityContainer::E_Update(int delta)
{
    for (auto& child : children)
        child->Update(delta);
}

Update()是实体的公共功能。但是,在编译时,我收到以下错误:

  

c:\ program files(x86)\ microsoft visual studio 11.0 \ _vc \ include \ xmemory0(617):错误C2248:'std::unique_ptr<_Ty>::unique_ptr':无法访问类'std::unique_ptr<_Ty>'中声明的私有成员

1 个答案:

答案 0 :(得分:4)

您正在尝试复制unique_ptr。它们无法复制,只能被移动。

在第一种情况下,使用参考:

for (auto const & child : children) {
    child->Update(delta);
}

在第二种情况下,直接使用dereferenced iterator:

for (auto child = children.begin(); child != children.end(); ++child) {
   (*child)->Render();
}

或者,如果您真的想要一个单独的变量,请将其作为参考:

unique_ptr<Entity> const & childPtr = *child;

我知道有一种新形式的基于范围的for循环的提案,它将通过引用访问这些元素:

for (child : children) {
    child->Update(delta);
}

但这还没有正式存在。