C++ 唯一向量的迭代器的访问成员
我有一个向量:C++ 唯一向量的迭代器的访问成员,c++,c++11,stdvector,unique-ptr,C++,C++11,Stdvector,Unique Ptr,我有一个向量: std::vector<std::unique_ptr<MyAbstract>> myList; 这条线 if (it->id == 2) 给我一个错误: “class std::unique_ptr”没有名为“id”的成员 这似乎有效: if (it->get()->id == 2) 我想知道为什么?!以下是完整的代码: *它具有类型std::unique\u ptr,当然它没有名为id的成员 因此,您必须通过get()获取其“值
std::vector<std::unique_ptr<MyAbstract>> myList;
这条线
if (it->id == 2)
给我一个错误:
“class std::unique_ptr”没有名为“id”的成员
这似乎有效:
if (it->get()->id == 2)
我想知道为什么?!以下是完整的代码:
*它具有类型std::unique\u ptr
,当然它没有名为id
的成员
因此,您必须通过get()
获取其“值”:
it
是一个迭代器,因此it->
尝试访问向量(std::unique_ptr
)中存储的类型的成员,而不是MyAbstract
的std::unique_ptr
保持不变。您需要做的是取消对迭代器的引用以获得底层的std::unique\u ptr
,然后您可以使用->
像这样访问MyAbstract
的成员
(*it)->id
谢谢,我知道这是因为基础类型,但我认为->会神奇地指向unique_ptr中的MyAbstract,这样我就不必使用get()。@DoubleVoid如果这样做,那么您将无法轻松访问std::unique_ptr
的成员。
it->get()->id
(*it)->id