クラスのメンバーとして CStrings の配列があります。
...
private:
CString mStrings[7];
...
クラスのデストラクタは正しく呼び出されますが、私の分析ツールは、7 つの mString のそれぞれに (クラスの割り当てと割り当て解除を行うたびに) メモリ リークがあることを示しています。
CStrings はメモリ自体を管理していると思いました。それらを配列に入れているという事実は、ここで何かを変えますか?
クラスのメンバーとして CStrings の配列があります。
...
private:
CString mStrings[7];
...
クラスのデストラクタは正しく呼び出されますが、私の分析ツールは、7 つの mString のそれぞれに (クラスの割り当てと割り当て解除を行うたびに) メモリ リークがあることを示しています。
CStrings はメモリ自体を管理していると思いました。それらを配列に入れているという事実は、ここで何かを変えますか?
いいえ、それは漏れてはいけません。new
またはnew[]
(または)を割り当て、メモリmalloc
を解放(、、delete
またはdelete[]
)しない限り、リークは発生しません。free
あなたの場合、アレイは自動ストレージにあるため、自動的にクリーンアップされます。また、CString
sは自動的にメモリを管理します。誤検知であるか、問題の原因となっている他のコードがあります。
編集-aCString
はリークしませんが、誤検知は当てはまらない可能性があります。次のように初期化するチャンスはありますか?
unsigned char* x = new unsigned char[10];
CString str(x);
と忘れてdelete[] x
、または同様の何か?
編集2-たぶん、あなたのクラスの削除されていないインスタンスに対してエラーが発生します:
struct X
{
private:
CString mStrings[7];
};
//...
X* x = new X;
ここでCString
、実際にはchar *
.
これがキャストであり、クラスがそれらを割り当てている場合、デストラクタはそれらの割り当てを解除する必要があります。
そのオブジェクトの削除は浅いものになります。問題があります。
しかし、最後に - の型はCString
何ですか?