Я создал класс с членами private, std::unique_ptr, а именно, m_VBO
и m_EBO
, как показано.
class VAO {
public:
VAO();
std::unique_ptr<VBO> GetVBO();
std::unique_ptr<EBO> GetEBO();
private:
std::unique_ptr<VBO> m_VBO;
std::unique_ptr<EBO> m_EBO;
};
Класс также включает методы get для защиты и возврата этих членов для использования при необходимости.
Определение этих методов "get" таково:
//*************************************************************************************************
std::unique_ptr<VBO> VAO::GetVBO()
{
return std::make_unique<VBO>(m_VBO);
//return std::make_unique<VBO>();
}
//*************************************************************************************************
std::unique_ptr<EBO> VAO::GetEBO()
{
//return std::make_unique<EBO>(m_EBO);
return std::make_unique<EBO>();
}
который не работает.
Я не могу понять правильную технику написания методов "получить".
Как это делается?
VAO
является уникальным владельцем этого ресурса. Он не может совместно использовать объект снаружи, потому что это означало бы потерю уникального права собственности на объект. Можно либо (лучший вариант) реорганизовать свою логику так, чтобы не нужны были геттеры, (чуть хуже) передать объект вместе с владением или (неплохо, но хуже из этих трех) сделать указательstd::shared_ptr
, чтобы он мог иметь много владельцы. - person Yksisarvinen   schedule 04.09.2019