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