いくつかの配列と削除が必要なリソースがあります。これらの変数の値はプログラムの存続期間を通じて保持され、単一の関数でのみ使用されるため、静的変数に自然に適合します。
void func() {
static GLfloat arrs[4] = {1, 1, 1, 1};
static GLUquadric* quad = gluNewQuadric(); // delete with gluDeleteQuadric(quad)
//... other codes ...
}
ただし、静的を使用した場合、関数の外部からこれらの変数にアクセスできないため、これらのリソースを削除するのに問題が発生します。これらのグローバルを作成することはできますが、可能であればそれを避けたいと思います。
したがって、問題は次のとおりです。
- arrs []はスタックまたはヒープに割り当てられていますか?それで、私はそれを削除する必要がありますか?
- GLUquadricの場合、明らかにコンパイラーはそれを適切に削除する方法を知りません。今のところ、美しく機能するRAIIラッパークラスを使用しましたが、さらに簡単なアプローチがあるかどうかを探しています。
valgrindはGLUquadricをリリースしないと不平を言いました、そして私がそれらをリリースするときにプログラムがとにかく終了するはずであり、これらのリソースがプログラムの終了時におそらく(?)リリースされるとしても、valgrindをサイレンシングするのではなくクリーンアップするだけだと思います。