私はこのようなものがあります:パラメータを渡すときに作成されるオブジェクトは削除する必要がありますか?
class GLSLShader {
public:
GLSLShader(GLenum);
~GLSLShader();
};
class GLSLProgram {
public:
GLSLProgram(GLSLShader *, GLSLShader *);
~GLSLProgram();
private:
GLSLShader *m_VertexShader;
GLSLShader *m_FragmentShader;
};
GLSLProgramコンストラクタは次のように呼ばれるように起こっている:
GLSLProgram program(new GLSLShader(GL_VERTEX_SHADER), new GLSLShader(GL_FRAGMENT_SHADER));
私の質問はどこで割り当てられたシェーダオブジェクトを削除する必要があります。私はGLSLProgramのデストラクタでそれを削除する必要がありますか?それとも、以下のコードのように別の方法で管理する必要がありますか?
GLSLShader *vertex = new GLSLShader(GL_VERTEX_SHADER);
GLSLShader *fragment = new GLSLShader(GL_FRAGMENT_SHADER);
GLSLProgram program(vertex, fragment);
delete vertex;
delete fragment;
[使用RAII](http://stackoverflow.com/questions/395123/raii-and-smart-pointers-in-c)Rakete1111 @ – Rakete1111
:彼はRAIIを使用しています。 'GLSLShader'のデストラクタは、コンストラクタが割り当てるリソースをクリーンアップします。彼はちょうどRAII *を本当にひどく使っています* –
**所有権**の質問です。 GLSLProgramがこのオブジェクトの所有者であると仮定すると、GLSLProgramは破壊時にそれらを削除する必要があります。 GLSLProgramがそれらと一緒に動作すると仮定すると、それは許されません。 – ilotXXI