无法正确地将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 )
{
//...
}
答案 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
}