У меня есть что-то вроде этого:Где объекты, созданные при передаче параметров, должны быть удалены?
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));
Мой вопрос, где я должен удалить выделенные объекты 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 просто работает с ними, он не должен. – ilotXXI