我不確定下面的代碼是否從內存泄漏中安全。多態C++與純虛函數析構函數
#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文檔並不清楚對象指針。 Qt會刪除它們正確的析構函數的對象指針嗎?另外,可Renderable指針會發生什麼?正如你可以從「界面」看到的那樣,它沒有析構函數。
感謝您的任何意見。 ChaoSXDemon
所以我想析構函數也必須是純虛擬的? – ChaoSXDemon
@ChaoSXDemon不是純虛擬的,只是虛擬的。你可以把它變成純粹的虛擬,但沒有任何意義,它必須有一個定義。 –
我應該在我的實現對象中寫入什麼內容,以便對於使用Renderable的w/e對象,它會調用正確的去desturctor? – ChaoSXDemon