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

Access member of a iterator of a vector of unique_ptr

本文关键字:迭代器 成员 向量 ptr unique 访问      更新时间:2023-10-16

我有一个向量:

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

it是一个

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

(*it)->id

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

所以你必须通过get ()来获得它的"价值":

it->get()->id