访问unique_ptr向量的迭代器的成员

时间:2016-07-08 15:38:35

标签: c++ c++11 stdvector unique-ptr

我有一个矢量:

std::vector<std::unique_ptr<MyAbstract>> myList;

我想在循环中访问成员“id”并删除特定项目:

for (auto it = myList.begin(); it != myList.end();)
{
    if (it->id == 2)
    {
        it = myList.erase(it);
        break;
    }
    else
        ++it;
}

这一行...

if (it->id == 2)

给了我一个错误:

  

'class std :: unique_ptr'没有名为'id'的成员

这似乎有效:

if (it->get()->id == 2)

我想知道为什么?!这是完整的代码: http://ideone.com/kFohfA

2 个答案:

答案 0 :(得分:6)

it是一个迭代器,因此it->尝试访问存储在向量(std::unique_ptr<MyAbstract>)中的类型的成员而不是MyAbstract std::unique_ptr成立的成员。您需要做的是取消引用迭代器以获取基础std::unique_ptr<MyAbstract>,然后您可以使用MyAbstract访问->的成员

(*it)->id

答案 1 :(得分:2)

*it的类型为std::unique_ptr<MyAbstract>,当然没有名为id的成员。

所以你必须通过get ()获得&#34;值&#34;:

it->get()->id