CPtrArray系で削除と同時に破棄 – プログラミング – Home

CPtrArray系で削除と同時に破棄
 
通知
すべてクリア

[解決済] CPtrArray系で削除と同時に破棄


Shogun
 Shogun
(@Shogun)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

.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();
}


引用未解決
トピックタグ
名無し
 名無し
(@名無し)
ゲスト
結合: 20年前
投稿: 15
 

ない。
CPtrArrayを継承したクラスを作ると楽かも。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 59
 

> CPtrArrayを継承したクラスを作ると楽かも。
どうせなら
CTypedPtrArray< CPtrArray, myINT* >
から継承させるといいかも。


返信引用
ささ
 ささ
(@ささ)
ゲスト
結合: 20年前
投稿: 9
 

CArray ならポインタを使う必要が無い(参照をコピーしてくれる)ので、new やdelete
をしなくても使えますよ。使うときは、afxtempl.h のインクルードが必要です。

CArray<myINT, myINT&> m_myINTList;

RemoveAtなどのメンバは、自動的に表示してくれない(バグ?)ですが、使えます。使
い終わった後 RemoveAll をしないとリークするのは CPtrArray と同じですが。


返信引用
Shogun
 Shogun
(@Shogun)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

皆さんありがとうございます。
CArrayで望みのことが出来ました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました