我正在关注一本"学习OpenGL"的书,据说在链接单个着色器并编译着色器程序之后,我们不再需要单个着色器了。尽管在更复杂的计算机图形学世界中可能并不完全正确,但假设它是。
现在,在构建Shader
和ShaderProgram
类时,我想实现这种"不需要后析构"行为,即在构造函数完成其作业后ShaderProgram
应调用顶点和片段着色器对象析构函数。
我可以通过使用std::unique_ptr<Shader>
并将其移动到ShaderProgram
构造函数中来轻松实现这一点。
我只是好奇是否有办法在不使用std::unique_ptr
的情况下做到这一点.
这是我目前拥有的示例代码:
class Shader {
public:
Shader(){\creating a shader}
~Shader(){glDeleteShader(id);}
/* some methods */
private:
unsigned int id;
};
class ShaderProgram {
public:
ShaderProgram(std::unique_ptr<Shader> vertex, std::unique_ptr<Shader> fragment){\create a shader}
~ShaderProgram(){glDeleteProgram(id);}
/*some methods*/
private:
unsigned int id;
};
只需在 ShaderProgram 构造函数中链接glDeleteShader(id)
后调用它,无需定义 Shader 类来保存此临时对象。