CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

关于析构函数?? 没看懂!

楼主edisonkun(简单代码)2003-02-04 15:59:34 在 C/C++ / C语言 提问

#include   <iostream>  
  #include   <stdio.h>  
  #include   <cstring>  
  using   namespace   std;  
   
  struct   name{  
  char   *contents;  
  name   (char   *name);  
  ~name();  
  };  
   
  name::name(char   *name)  
  {  
    int   len=strlen(name);  
    contents=new   char[len+1];  
    strcpy(contents,name);  
     
  }  
   
  name::~name()  
  {  
    cout<<"~~~~~~~~~~`"<<contents<<endl;  
  }  
   
  void   client()  
   
    {  
      name   n1("jones");  
      name   *p=new   name("liukun");  
     
      delete   p;           //只有p啊!!????n1的地址怎么删的?  
    }  
     
    int   main()  
    {  
      client();  
      getchar   ();  
      return   0;  
    }  
     
  输出结果是   ~~~~~~~~~~~~jones  
                        ~~~~~~~~~~~~liukun  
    delete不是   只把*p指向的地址删除了吗?为什么也把n1也删了    
  谁能帮我说明以下    
  顺便在说一下析构函数   谢谢了! 问题点数:10、回复次数:7Top

1 楼Caoyu015(酷鱼一代)回复于 2003-02-04 16:10:41 得分 10

p   是在回收指针所指向的内存空间时,调用其析构函数。  
  n1时局部量,是在退出函数局部域的时候由系统自动调用它的析构函数。  
   
  关于析构函数,详细的书上应该有介绍,你还是看看书吧!!!Top

2 楼rtdb(东临碣石)回复于 2003-02-04 16:46:35 得分 0

n1是在声明时构造,   出了作用域时(那个})时,由系统自动调用析构。  
   
  p是指针,   在new时构造,   delete时析构。Top

3 楼kevinh(每天一个太阳)回复于 2003-02-05 10:17:21 得分 0

析够只是析够指针变量,不会删除地址的Top

4 楼xly12(独居长空)回复于 2003-02-05 12:05:58 得分 0

析构函数是释放对象所占的系统资源,其功能与构造函数正好相反。一般这两个函数由系统自动调用执行的。Top

5 楼langhaixin(C++如此多娇,引无数高手尽折腰!)回复于 2003-02-05 13:30:00 得分 0

oK,首先nl是个栈对象(就是nl是别放在一个stack的存储空间里的,而p是放在一个heap的存储空间里)nl的析构函数   destructor   是有系统否则调用,就是当nl的生命周期结束的时候,自动调用。而释放p占有的内存,有用户指定使用delete释放,而delete则会隐式的调用析构函数。  
   
  还有关于变量的生存周期的问题你可以找相关的书籍看看,或是是看CSDN的FAQ,应该都有讨论。  
  推荐你两本书Effective   C++和More   Effective   C++   电子版的下载地址  
  http://download.pchome.net/php/download2.php?sid=11136&url=/development/reference/MEC0410.zip&svr=4  
   
  http://www.dingbing.com/book/effect_c_cn.zipTop

6 楼robbie24(独行虾)回复于 2003-02-05 13:43:54 得分 0

你应该好好看看函数那章了~  
  函数的相关变量都在运行stack中,n1是局部变量~函数client一到执行结束自然就释放所有其内部变量,n1没有了,指针变量p也会消失~,但是,p所指向的堆内存是存在的!这个错误是很容易忽视的,如果要使用这段内存,你必须要讲client函数的返回类型改为name*   否则是内存泄露  
  Top

7 楼edisonkun(简单代码)回复于 2003-02-05 23:12:22 得分 0

恩   等我把类的基础看完   在看,,,这些东西吧    
   
  谢谢大家了Top

相关问题

  • 析构函数
  • 析构函数?
  • 构造函数和析构函数
  • 构造函数与析构函数
  • 构造函数析构函数问题
  • 析构函数问题
  • 有关析构函数
  • c++关于析构函数!
  • 析构函数的问题
  • 析构函数的问题

关键词

  • len
  • contents
  • include
  • char

得分解答快速导航

  • 帖主:edisonkun
  • Caoyu015

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo