次のコードがメモリ リークから安全かどうかはわかりません。
#ifndef RENDERABLE_H
#define RENDERABLE_H
class QGLShaderProgram;
class GLWidget;
class BoundingBox;
class Renderable{
public:
virtual void update(float duration) = 0;
virtual void render(QGLShaderProgram& shader, float duration) = 0;
virtual BoundingBox* getBBox() const = 0;
virtual void translate(float xx, float yy, float zz) = 0;
virtual void rotate(float degrees_x, float degrees_y, float degrees_z) = 0;
virtual void scale(float xx, float yy, float zz) = 0;
};
#endif // RENDERABLE_H
上記の「インターフェース」は、object3d.cpp によって実装されています。同じシーンに属している場合、多くの Object3D オブジェクトを Scene オブジェクトに追加できます。ただし、シーンの終了時にメモリ リークがないことを確認したいので、すべてに対して delete を呼び出します。ただし、シーン オブジェクトには次の変数があります。
QVector<Renderable*>* sceneObjects;
QVector<GLTexture2D*>* sceneTextures;
QMap<QString, Material*>* sceneMaterials;
ご覧のように、
delete sceneObjects;
delete sceneTextures;
delete sceneMaterials;
QVector を削除し、Qt に従って、それらのオブジェクトのデストラクタを呼び出す必要があります。ただし、Qt のドキュメントでは、オブジェクト POINTERS について明確ではありませんでした。Qtは適切なデストラクタでオブジェクトポインタを削除しますか? さらに、Renderable ポインターはどうなりますか? 「インターフェース」からわかるように、デストラクタはありません。
ご意見ありがとうございます。ChaoSXデーモン