クラスのメンバーとして CStrings の配列があります。
...
private:
CString mStrings[7];
...
クラスのデストラクタは正しく呼び出されますが、私の分析ツールは、7 つの mString のそれぞれに (クラスの割り当てと割り当て解除を行うたびに) メモリ リークがあることを示しています。
CStrings はメモリ自体を管理していると思いました。それらを配列に入れているという事実は、ここで何かを変えますか?
クラスのメンバーとして CStrings の配列があります。
...
private:
CString mStrings[7];
...
クラスのデストラクタは正しく呼び出されますが、私の分析ツールは、7 つの mString のそれぞれに (クラスの割り当てと割り当て解除を行うたびに) メモリ リークがあることを示しています。
CStrings はメモリ自体を管理していると思いました。それらを配列に入れているという事実は、ここで何かを変えますか?
いいえ、それは漏れてはいけません。newまたはnew[](または)を割り当て、メモリmallocを解放(、、deleteまたはdelete[])しない限り、リークは発生しません。free
あなたの場合、アレイは自動ストレージにあるため、自動的にクリーンアップされます。また、CStringsは自動的にメモリを管理します。誤検知であるか、問題の原因となっている他のコードがあります。
編集-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何ですか?