首页
社区
课程
招聘
[求助]VC中实现一个接口方法后资源的释放
发表于: 2008-12-10 16:52 5177

[求助]VC中实现一个接口方法后资源的释放

2008-12-10 16:52
5177
先看代码:

CBase * pInst;
CString str1,str2,str3;

pInst = new CUnA();
pInst->RunFunc(str1, str2);
pInst = new CUnB();
pInst->RunFunc(str2, str1);
pInst = new CUnC();
pInst->RunFunc(str3, str2);

CBase是基类,CUnA,CUnB,CUnC都是它的子类(派生类);
CUnA,CUnB,CUnC分别实现CBase的RunFunc方法.

我要问的问题就是:我的这段代码是在一个循环跑的线程中,我必须释放NEW出来的空间,试过不少方法,请大虾们指点指点.

补充:CBase * pInst;  基类指针定义在循环体之外.多态实现后释放没想到这么难

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
2
为什么不把申请资源的
pInst = new CUnA();
pInst = new CUnB();
写在循环外面,比如这样:pInstA = new CUnA();pInstB = new CUnB();
循环完了再释放?
2008-12-10 16:56
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢你的回答。
因为我在循环中去判断后,才能给对应的RunFunc方法传参数.只为实现多态
2008-12-10 17:02
0
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
4
那就每循环一次释放一次怎么样?要么在循环外申请内存,循环内自己实现多态。多态无非就是
一个函数数组和函数指针而已,循环完了再释放
2008-12-10 17:23
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我试过不少方法了。

第一,在循环后delete pInst(不行)

第二,pInst = new CUnA();
       pInst->RunFunc(str1, str2);
       delete pInst;
       pInst = new CUnB();
       pInst->RunFunc(str2, str1);
       delete pInst;
       pInst = new CUnC();
       pInst->RunFunc(str3, str2);
       delete pInst;(不行)

你能具体上点代码吗???先谢过
2008-12-10 17:30
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
第二种应该可用才对啊,还有是不是你得析构函数没有声明virtual?这样delete pInst 只会调用基类的析构函数哦
2008-12-10 17:39
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
析构函数有声明为virtual
2008-12-11 09:32
0
雪    币: 204
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
每个delete 后再 NULL一下行不?
2008-12-14 23:34
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
9
CBase * pInst[3];
pInst[0] = new CUnA();
pInst[1] = new CUnB();
pInst[2] = new CUnC();

CString str[3];

pInst[i]->RunFunc(str[i], str[(i+1)%2]);

delete[] pInst

怎么样
2008-12-15 22:05
0
游客
登录 | 注册 方可回帖
返回
//