小众知识

首页 > 正文

有关析构函数的问题

我创建了一个链表,头指针为head
现在想在析构函数里释放内存空间,请问该怎么办
 

析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。

 steedhorse 发表于:2003-08-23 19:58:50
得分:15 

从头到尾,一个结点一个结点的释放啊。比如可以这样:

Node * p = head;
node * q;
while(p)
{
    q = p->next;
    delete p;
    p = q;

 renyangyao 发表于:2003-08-23 20:14:57
得分:0 

谢谢上面的朋友,编译通过了,可是我怎么才能看出内存释放了啊?

 nirvana_li 发表于:2003-08-23 20:16:39
得分:7 

《数据结构》里面就是用的 steedhorse(晨星)的方法,应该可以。 

 renyangyao 发表于:2003-08-23 20:19:57
得分:0 

我觉得也是,不过还是想测试一下,不知道大家有什么好办法吗? 

 renyangyao 发表于:2003-08-23 20:23:53
得分:0 

我用的是vc++6.0 

 winco 发表于:2003-08-23 20:41:48
得分:8 

连续申请一个10000个节点的东东,
再没有释放内存的时候,通过Win2000的线程监测(任务管理器)
看一下程序使用的内存有多少。
然后释放,再看用了多少 

 steedhorse 发表于:2003-08-23 20:53:56
得分:0 

同意楼上的方法,如果你确实感兴趣,可以专门写一个Allocate函数,然后再写一个Deallocate函数,然后再Allocate中分配上几十万个结点,再Deallocate中释放他们,写一段类似下面的测试代码:

getch();
Allocate();
getch();
Deallcate();

测试时打开Windows 2000的任务管理器,一遍按键,一般观察你的进程的内存占用情况。
注意,因为操作系统内存的分配往往是以段或页为单位的,所以,如果你分配的结点书不多,可能根本看不出内存的变化。

不过说实在的,我个人感觉这挺无聊的,:) 

 renyangyao 发表于:2003-08-27 13:32:28
得分:0 

基本上使用steedhorse的方法
Node  *  p  =  head;  
node  *  q;  
while(p)  
{  
       q  =  p-  >next;  
       delete  p;  
       p  =  q;  

 renyangyao 发表于:2003-08-27 13:32:29
得分:0 

基本上使用steedhorse的方法
Node  *  p  =  head;  
node  *  q;  
while(p)  
{  
       q  =  p-  >next;  
       delete  p;  
       p  =  q;  

上一篇:关于运行时识别
下一篇:const对象存在的符号列表是什么东东?

分享到: