模板参数的传递,怎么不能改变变量的值

大鸟的小天空 2003-11-12 04:07:23
...
template <class MyO>
void TfrmUserQuery::MyDeleteObject(MyO * M)
{
if(M != NULL){
delete M;
M = NULL;
}
}
...
TsuiComboBox a = new TsuiComboBox(this);
...
MyDeleteObject(a);
这样执行之后a为什么不等于NULL
...全文
84 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
大鸟的小天空 2003-12-05
  • 打赏
  • 举报
回复
楼上对了,谢国,多多向您学习。
TopCat 2003-12-04
  • 打赏
  • 举报
回复
不是吧,这个问题居然都会全部回答错?

楼主的函数本身写错了,参数是指针只能做到改变指针指向内存的值被带出,而现在你是对指针本身的操作,当然带不出来了,正确的写法是这样:

template <class MyO>
void TfrmUserQuery::MyDeleteObject(MyO **M) //注意是指针的指针
{
if((*M) != NULL){
delete (*M);
(*M) = NULL;
}
}
...
TsuiComboBox a = new TsuiComboBox(this);
...
MyDeleteObject(&a);
Bkoklam 2003-12-04
  • 打赏
  • 举报
回复
是这样的,delete 后系统自动清空了,不能再去赋空值:
if(!M == NULL){
delete M;
}
Bkoklam 2003-12-04
  • 打赏
  • 举报
回复
应该这样写:
if(!M == NULL){
delete M;
M = NULL;
}
constantine 2003-12-04
  • 打赏
  • 举报
回复
既然delete M;怎么还要M=NULL;
直接M=NULL;
netsys2 2003-12-04
  • 打赏
  • 举报
回复
void TfrmUserQuery::MyDeleteObject(MyO * M)
{
M = NULL;//直接为空
}
huoniao1976 2003-12-04
  • 打赏
  • 举报
回复
等于空试试
大鸟的小天空 2003-12-04
  • 打赏
  • 举报
回复
难道没人愿意帮俺一把,要不就随便回一下,把分送出去,哈哈

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧