2015-07-01 2 views
0

Неправильное обращение через вектор unique_ptrs к моему собственному пользовательскому объекту. Я предоставил псевдокод ниже, который не полностью сфокусирован, но сфокусируйтесь на цикле for. Я хотел бы использовать цикл C++ 11 «for» и перебирать векторы - ИЛИ из того, что я слышал, лучше, если ваши собственные итераторы? Я просто не знаю, как это сделать, когда у меня есть отдельные классы. Если я сохраняю вектор в классе менеджера, то где я должен определять методы итератора? В классе объекта или в классе менеджера? Я также хочу убедиться, что мои данные остаются const, поэтому фактические значения не могут быть изменены.C++ 11 для сквозного вектора unique_ptr

// 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

Нашел ответ на мои вопросы сам.

Важно помнить, что вы не можете создать копию unique_ptr ... это включает в себя передачу указателя на другие функции. Если вы передадите функцию unique_ptr другой функции, вы должны использовать символ & в функции приема.

Например:

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 
} 
Смежные вопросы