转换shared_ptr类型向量的迭代器

时间:2011-06-26 17:31:00

标签: c++ boost iterator shared-ptr

如何构建shared_ptr类型向量的迭代器?请考虑以下示例:

typedef boost::shared_ptr < MyClass > type_myClass;

vector< type_myClass > vect;
vector< type_myClass >::iterator itr = vect.begin();

while(itr != vect.end())
{
   //Following statement works, but I wish to rather cast this 
   //to MyClass and then call a function?
   (*itr)->doSomething(); 
}

3 个答案:

答案 0 :(得分:7)

您不想强制转换,而是提取对该对象的引用:

MyClass & obj = *(*it); // dereference iterator, dereference pointer
obj.doSomething();

答案 1 :(得分:3)

您可以通过再次取消引用来获取引用。

MyClass& ref = **itr;

然后施放它或任何你想要的东西。

答案 2 :(得分:3)

您可以使用方法get()according to the docs

T * get() const; // never throws
Returns: the stored pointer.

这意味着你可以这样做:

type_myClass* ptr =  *itr.get();    
ptr->doSomething();