| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 332 人关注过本帖
标题:析构函数的调用
只看楼主 加入收藏
wuyushuai521
Rank: 2
等 级:论坛游民
帖 子:80
专家分:47
注 册:2012-10-9
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:3 
析构函数的调用
各位大侠,小弟编写了一个关于析构函数调用的程序:其中有些不明白之处,望各位大侠指点一二:
#include <iostream>

using namespace std;

class date
{
private:
    int year;
    int month;
    int day;
public:
    date(int y=2009,int m=1,int d=1);
    date(const date& de);
    ~date();
    void showdate();
};

date::date(int y,int m,int d)
{
    year=y;
    month=m;
    day=d;
    cout<<"Constructing..."<<endl;
}

date::date(const date &de)
{
    year=de.year;
    month=de.month;
    day=de.day;
    cout<<"Copy constructing..."<<endl;
}

date::~date()
{
    cout<<"destructing.."<<endl;
}

void date::showdate()
{
    cout<<year<<"."<<month<<"."<<day<<endl;
}
date fun(date de1)
{
    date date3(de1);
    return date3;
}

int main()
{
    date obj1(1993,3,20);
    date obj3;
    date obj2(obj1);
    date obj4=obj2;
    obj3=obj2;
    obj3=fun(obj2);
    obj3.showdate();
   
    return 0;
}

输出结果为:
图片附件: 游客没有浏览图片的权限,请 登录注册
小弟不明白的是:画红线的部分,在那个地方析构函数怎么会被调用,而且还被调用了三次?
搜索更多相关主题的帖子: void private include public 
2012-11-22 20:40
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:5 
不要这样看,你要知道,要创建一个对象,可以用构造函数,也可以拷贝构造函数,但是销毁一个对象,却要调用析构函数,因此,
你最后应该查看,构造函数,拷贝构造函数之和的数量是否和析构函数的数量相等

拷贝构造函数在3个地方调用,1,被当作参数传递 2,被当作返回值,3,初始化对象

所以你自己对照着看吧,应该很容易理解

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2012-11-22 22:10
mmmmmmmmmmmm
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:8
帖 子:388
专家分:1809
注 册:2012-11-2
收藏
得分:5 
调试发现:楼主所说的三次析构是在这段代码里面obj3=fun(obj2);执行的。

程序代码:
先分析构造函数:
fun(obj2)//形参执行一次Copy constructing...
date date3(de1);//定义data3 执行一次Copy constructing...
return date3;//函数返回data对象 执行一次Copy constructing...
与之相对应,就会有三次destructing..


个人观点,还请各位指教。

我们的目标只有一个:消灭0回复!
while(1)
++money;
2012-11-22 22:39
wuyushuai521
Rank: 2
等 级:论坛游民
帖 子:80
专家分:47
注 册:2012-10-9
收藏
得分:0 
谢谢
2012-11-27 16:34
快速回复:析构函数的调用
数据加载中...
 
   



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

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