当对象离开函数范围时,是否有其他方法可以销毁对象?



我正在关注一本"学习OpenGL"的书,据说在链接单个着色器并编译着色器程序之后,我们不再需要单个着色器了。尽管在更复杂的计算机图形学世界中可能并不完全正确,但假设它是。

现在,在构建ShaderShaderProgram类时,我想实现这种"不需要后析构"行为,即在构造函数完成其作业后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 类来保存此临时对象。

最新更新