游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2673|回复: 7

求助关于C++函数模板的问题

[复制链接]

2

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
QQ
发表于 2008-7-10 17:02:00 | 显示全部楼层 |阅读模式


  1. #include <iostream>
  2. #include <crtdbg.h>
  3. using namespace std;

  4. template<class T> void SafeDelete(T t)
  5. {
  6.         if( t )
  7.         {
  8.                 delete t;
  9.                 t = 0;
  10.         }
  11. }

  12. int main(void)
  13. {
  14. #if defined(DEBUG) | defined(_DEBUG)
  15.         _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
  16. #endif

  17.         int* p = new int[3];

  18.         SafeDelete( p );

  19.         cin.get();
  20.         return 0;
  21. }
复制代码


我想用定义的模板函数把指针删除并赋值为0,指针删除了但是并没有变成0。。。
谁知道怎么回事啊,第一次发贴,多多指教。 [em4]

5

主题

972

帖子

975

积分

高级会员

Rank: 4

积分
975
发表于 2008-7-10 18:26:00 | 显示全部楼层

Re:求助关于C++函数模板的问题

t=0是使函数内的指针变成0,而原来的p的值不变。
这里是值传递

2

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
QQ
 楼主| 发表于 2008-7-11 10:05:00 | 显示全部楼层

Re:求助关于C++函数模板的问题

谢谢CLOD
把参数改成引用型的问题就解决了。
SafeDelete(T& t)

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2008-7-11 13:58:00 | 显示全部楼层

Re:求助关于C++函数模板的问题

if(t)这句是浪费,delete一个0指针一点问题没有。http://www.cppblog.com/minidxer/archive/2007/10/19/34641.html

更重要的是new T[]要和delete[]配对使用,所以你还需要一个SafeDeleteArray,且这里只能用SafeDeleteArray。

2

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
QQ
 楼主| 发表于 2008-7-11 14:40:00 | 显示全部楼层

Re: 求助关于C++函数模板的问题

多谢 funcman 的提醒,否则又漏了个大错误。
现在把改正后的代码贴出来



  1. #include <iostream>
  2. #include <crtdbg.h>

  3. using namespace std;

  4. //删除指针
  5. template<class T> void SafeDelete(T& t)
  6. {
  7.         delete t;
  8.         t = 0;
  9. }

  10. //删除数组指针
  11. template<class T> void SafeDeleteArray(T& t)
  12. {
  13.         delete[] t;
  14.         t = 0;
  15. }

  16. int main(void)
  17. {
  18.         // 为调试模式开启运行时内存检查
  19. #if defined(DEBUG) | defined(_DEBUG)
  20.         _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
  21. #endif

  22.         int* p = new int(3);
  23.         SafeDelete( p );

  24.         int* pArr = new int[3];
  25.         pArr[0] = 0;
  26.         pArr[1] = 1;
  27.         pArr[2] = 2;
  28.         SafeDeleteArray( pArr );

  29.         cin.get();
  30.         return 0;
  31. }
复制代码

5

主题

972

帖子

975

积分

高级会员

Rank: 4

积分
975
发表于 2008-7-11 15:52:00 | 显示全部楼层

Re:求助关于C++函数模板的问题

呵呵,我也一直在用那个万恶的if

56

主题

758

帖子

768

积分

高级会员

Rank: 4

积分
768
发表于 2008-7-11 16:04:00 | 显示全部楼层

Re:求助关于C++函数模板的问题

共同进步...

0

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2008-7-12 21:32:00 | 显示全部楼层

Re:求助关于C++函数模板的问题

这就是我以后要学的?
是不是很难啊。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 01:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表