.NET2003で質問です。
以下のプログラムのRemoveAtの時点で自動的にdeleteしてくれる
MFCクラスってありませんか?
構造体だとポインタで渡して自分でdeleteするしかないですか?
typedef struct
{
int a;
double b;
float c;
}myINT;
void Test(void)
{
CPtrArray pa;
//生成
for( int i = 0; i < 10; i++ )
{
myINT *p = new myINT;
p->a = i+1;
pa.Add(p);
}
//表示
for( int i = 0; i < 10; i++ )
{
myINT *p = (myINT *)(pa[i]);
printf(idx%d = %d\n, i+1, p->a);
}
printf(\nいくつか削除\n);
//削除
myINT *p;
delete (myINT *)(pa[1]);
pa.RemoveAt(1);
delete (myINT *)(pa[3]);
pa.RemoveAt(3);
delete (myINT *)(pa[5]);
pa.RemoveAt(5);
delete (myINT *)(pa[6]);
pa.RemoveAt(6);
printf(\n);
//表示
int cnt = pa.GetCount();
for( int i = 0; i < cnt; i++ )
{
myINT *p = (myINT *)(pa[i]);
printf(idx%d = %d\n, i+1, p->a);
}
//破棄
for( int i = 0; i < cnt; i++ )
{
delete pa[i];
}
pa.RemoveAll();
}
ない。
CPtrArrayを継承したクラスを作ると楽かも。
> CPtrArrayを継承したクラスを作ると楽かも。
どうせなら
CTypedPtrArray< CPtrArray, myINT* >
から継承させるといいかも。
CArray ならポインタを使う必要が無い(参照をコピーしてくれる)ので、new やdelete
をしなくても使えますよ。使うときは、afxtempl.h のインクルードが必要です。
CArray<myINT, myINT&> m_myINTList;
RemoveAtなどのメンバは、自動的に表示してくれない(バグ?)ですが、使えます。使
い終わった後 RemoveAll をしないとリークするのは CPtrArray と同じですが。
皆さんありがとうございます。
CArrayで望みのことが出来ました。