模板析构函数的问题

wnl0008 2009-07-20 12:40:17
定义一个模板类如下:
template<class T>
class List
{
public:
T content;
List *next; //指向后继的指针
List();
~List();
};
我想请教一下,在这个类的析构函数中,如果content是个指针类型,我们势必要delete掉content所指向的内存空间,这步怎么实现呢?我该如果知道content是哪个类型的指针?
...全文
353 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
steven_007 2009-07-21
  • 打赏
  • 举报
回复
学习。
chenyu2202863 2009-07-21
  • 打赏
  • 举报
回复
特化处理

C++ template上清楚的写着!
cheifer 2009-07-21
  • 打赏
  • 举报
回复
最简单的办法,你用智能指针, spart_ptr<T> 代替 T* 传入模板参数。

这样你就不用去delete了
naziim 2009-07-20
  • 打赏
  • 举报
回复
对一个非指针#4,这种做法完全没有意义,反而使画蛇添足
donkey301 2009-07-20
  • 打赏
  • 举报
回复
对一个指针我一般是付初值NULL,在释放时判断是不是NULL,具体就是:

template <class T>
class List
{
public:
T content;
List *next; //指向后继的指针
List()
{
content = NULL;
}
~List()
{
if ( NULL != content )
{
delete content;
content = NULL;
}
}
};
DarkChampion 2009-07-20
  • 打赏
  • 举报
回复
content的空间从哪来?
谁申请谁释放比较好
taodm 2009-07-20
  • 打赏
  • 举报
回复
"如果content是个指针类型,我们势必要delete掉content所指向的内存空间"呵呵,真的要“势必”么?
去买本《stl源码剖析》,学学模板偏特化萃取类型信息的技术吧。
K_s_G 2009-07-20
  • 打赏
  • 举报
回复
咦?
yangs2000 2009-07-20
  • 打赏
  • 举报
回复
什么地方new的。什么地方delete。你要是在构造函数里new的。就在~里delete。要是在类之外new。就在类之外delete
djj2007 2009-07-20
  • 打赏
  • 举报
回复
up

[Quote=引用 7 楼 qhd_kw 的回复:]
template <class T>
class List
{
public:
T content;
List *next; //指向后继的指针
List(){};
~List(){};
};

//对指针类型的参数进行模版特化
template <class T>
class List <T*>//注意这里
{
public:
T* content;
List *next; //指向后继的指针
List():content(NULL){};
~List(){delete []content};
};
[/Quote]
tangshuiling 2009-07-20
  • 打赏
  • 举报
回复
指针类型用模板特化解决!
qhd_kw 2009-07-20
  • 打赏
  • 举报
回复
template <class T>
class List
{
public:
T content;
List *next; //指向后继的指针
List(){};
~List(){};
};

//对指针类型的参数进行模版特化
template <class T>
class List<T*>//注意这里
{
public:
T* content;
List *next; //指向后继的指针
List():content(NULL){};
~List(){delete []content};
};
qhd_kw 2009-07-20
  • 打赏
  • 举报
回复
template <class T>
class List
{
public:
T content;
List *next; //指向后继的指针
List(){};
~List(){};
};

//对指针类型的参数进行模版特化
template <class T>
class List<T*>//注意这里
{
public:
T* content;
List *next; //指向后继的指针
List():content(NULL){};
~List(){delete []content};
};

64,641

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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