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

Access member of a iterator of a vector of 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' has no member named 'id'

这似乎有效:

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

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

*it 具有类型 std::unique_ptr<MyAbstract>,当然它没有名为 id.

的成员

所以你必须通过 get ():

获取它的 "value"
it->get()->id

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

(*it)->id