C ++ 11 for循环通过unique_ptr的向量

时间:2015-07-01 20:44:14

标签: c++11 for-loop iterator stdvector unique-ptr

无法正确地将unique_ptrs向量循环到我自己的自定义对象。我提供的伪代码下面没有完全充实,但专注于for循环。我想使用C ++ 11“for”循环,并迭代向量 - 或者从我所听到的,提供自己的迭代器更好?当我有单独的课时,我只是不知道该怎么做。如果我将向量保存在管理器类中,那么我应该在哪里定义迭代器方法?在对象类或经理类中?我还想确保我的数据保持不变,因此无法更改实际值。

// Class for our data
Class GeoSourceFile
{
    // some data, doesn't matter
    double m_dNumber;
    int    m_nMyInt;
}
// singleton manager class
Class GsfManager
{
  public:
    // Gets pointer to the vector of pointers for the GeoSourceFile objects
    const std::vector<std::unique_ptr<GeoSourceFile>>* GetFiles( );
  private:
    // Vector of smart pointers to GeoSourceFile objects
    std::vector<std::unique_ptr<GeoSourceFile>> m_vGeoSourceFiles;  
}
void App::OnDrawEvent
{
    GsfManager* pGsfMgr = GsfManager::Instance();
    for(auto const& gsf : *pGsfMgr->GetFiles() )
    {
         oglObj->DrawGeoSourceFile( file );
    }
}

void OglClass::DrawGeoSourceFile( std::unique_ptr<GeoSourceFile> file )
{
    //...
}

1 个答案:

答案 0 :(得分:1)

自己找到了我的问题的答案。

这里要记住的重要一点是你不能创建unique_ptr的副本......这包括将指针传递给其他函数。如果您将unique_ptr传递给另一个函数,那么您必须使用&amp;接收函数中的字符。

例如:

void OglClass::DrawGeoSourceFile( const std::unique_ptr<GeoSourceFile> file )
{
    // fails to compile, you're getting a copy of the pointer, which is not allowed
}

void OglClass::DrawGeoSourceFile( const std::unique_ptr<GeoSourceFile>& file );
{
    // successfully compiles, you're using the original pointer
}