| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 695 人关注过本帖
标题:关于vc++的析构函数的一个弱弱弱的小问题,高手解答一下,谢谢!!
只看楼主 加入收藏
liqiangzk982
Rank: 2
等 级:论坛游民
帖 子:50
专家分:16
注 册:2006-12-20
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:2 
关于vc++的析构函数的一个弱弱弱的小问题,高手解答一下,谢谢!!
vc++在类中可以自己设置构造函数和析构函数,在主程序中可以调用析构函数。
问题:1、如果在主程序中调用了一个实例的析构函数那么对接下来的程序运行有什么样的影响?
      2、在主程序中调用析构函数有用么?
      3、析构函数是不是与构造函数成对出现?是否可以单独执行,如果仅仅调用了析构函数是不是没有任何用处??

下边是一段可以运行的代码,在main函数中调用了子类的析构函数。
#include <iostream.h>
#include <conio.h>

class animal
{
public:
    animal()
    {
        cout<<"animal construct"<<endl;
    }
    ~animal()
    {
        cout<<"animal deconstruct"<<endl;
    }
    void sleep()
    {
        cout<<"animal sleep"<<endl;
    }
    void eat()
    {
        cout<<"animal eat"<<endl;
    }
    void breath()
    {
        cout<<"animal breath"<<endl;
    }
};

class fish : public animal
{
public:
    fish()
    {
        cout<<"fish construct"<<endl;
    }
    ~fish()
    {
        cout<<"fish deconstruct"<<endl;
    }
    void breath()
    {
        cout<<"fish bubble\n";
    }
};
void main()
{
    fish fh;
    fh.~fish();        //调用了一次fh的析构函数;
    fh.breath();
    animal an;
    an.breath();
    getch();
    cout<<"\n-------the end of the gatch()--------\n";    //仅仅做一个标记。看析构函数在哪里开始运行。
}

程序运行的结果为:
animal construct
fish construct
fish deconstruct          //调用fh的析构函数运行结果;
animal deconstruct        //fh的析构函数调用了,又没有新的构造函数运行,为什么运行fh.breath()还有结果?
fish bubble
animal construct
animal breath

-------the end of the gatch()--------
animal deconstruct
fish deconstruct          //fh的析构函数一定调用了,在这里又运行一遍???这是为什么呢?
animal deconstruct
press any key ton continue

从运行的结果来看fh的构造函数运行了1次,而fh的析构函数“fish deconstruct”运行了两次。这里就是我的问题三的内容,是不是单独调用析构函数是没有任何作用的??

搜索更多相关主题的帖子: 函数 解答 
2010-03-04 19:23
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:10 

1.析构函数只是在类对象生命结束时,由系统自动调用.一般在类构造函数中申请了堆空间(或其他动态申请空间)时,必须(可以)在析构函数中释放.
2.析构函数本身其实也是一个类成员函数,所以你调用它,跟调用普通类成员函数一样.所以你的调用并不会结束类对象.
3.一般不要轻易调用析构函数.

★★★★★为人民服务★★★★★
2010-03-05 14:05
liqiangzk982
Rank: 2
等 级:论坛游民
帖 子:50
专家分:16
注 册:2006-12-20
收藏
得分:0 
谢谢!!
忽略了一定构造函数和析构函数都是只有系统调用才能起到他的作用

菜鸟我最大!
2010-03-06 12:07
快速回复:关于vc++的析构函数的一个弱弱弱的小问题,高手解答一下,谢谢!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012152 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved