我可以将唯一指针作为函数参数而不是原始指针或数组传递吗
unsigned int* m_VAO;
m_VAO = (new unsigned int(totalNumberOfPies));
glGenVertexArrays(totalNumberOfPies, m_VAO);
而不是 m_VAO 是一个原始指针,这可以是一个智能的唯一指针吗?
您可以将您定义m_VAO
为std::unique_ptr<GLuint[]>
当您想要传递由智能指针管理的指针时,您将使用get()
检索该原始指针。
std::unique_ptr<GLuint[]> m_VAO;
m_VAO = std::make_unique<GLuint[]>(totalNumberOfPies);
glGenVertexArrays(totalNumberOfPies, m_VAO.get());
Astd::unique_ptr<GLuint[]>
只有在您还为其定义自定义析构函数时才有意义,该析构函数调用相应的 OpenGL 函数。再次释放顶点数组。即便如此,这是否是正确的方法也可能值得怀疑。
此外,如果该函数将直接声明所有权,或者将其传递到声明所有权的某个地方,则您只能将智能指针传递给函数(或编写一个函数来接受智能指针)。
如果您不这样做,那么问题是为什么要为此使用智能指针而不是std::vector
:
std::vector<GLuint> m_VAO;
m_VAO.resize(totalNumberOfPies);
glGenVertexArrays(m_VAO.size(), m_VAO.data());
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句