注册 登录
编程论坛 C++教室

新手求助!关于构造函数的一个问题

shyshit 发布于 2009-08-27 16:26, 507 次点击
程序如下:
#include<iostream>
using namespace std;
class Demo
{
public:
    Demo(){cout<<"ASD\n";}
    Demo(const Demo &x){cout<<"QWE\n";}
};
Demo userCode(Demo b){Demo c(b);return c;}
int main()
{
    Demo a,d;
    cout<<"123\n";
    d=userDode(a);
    return 0;
}
我没明白那个Dome(const Demo &x)是怎么被调用三次的,帮忙点拨一下,谢谢
6 回复
#2
xufen3402009-08-27 16:39
构造函数?你问的根本是拷贝构造函数问题。<BR>关键看d=userCode(a)。<BR>第一个:参数传值:Demo&nbsp;b=a后调用拷贝构造函数<BR>第二个:userCode内部Demo&nbsp;c(b);后调用拷贝构造函数&nbsp;<BR>第三个:return&nbsp;c返回时建了个临时对象,调用拷贝构造函数把c附给临时变量。<BR>
#3
shyshit2009-08-27 16:56
<b>回复 2楼 xufen340</b><br>哦~那个 return 返回值时都是返回的临时变量或者对象吗?不是直接返回return 后面的那个变量或对象吗?这个麻烦在讲解一下吧~
#4
xufen3402009-08-27 17:08
看函数声明确定返回的是什么
Demo userCode(Demo b)
这里是返回demo临时对象,如果你认为return c返回的是c那就错了,因为你返回的是值,不是c本身。
什么时候返回的是c,当你改成下面时是返回c
Demo& userCode(Demo b).
但是在你这个程序里面的c是局部变量,虽然你返回了别名,但是c在函数结束后就消失了,所以你的别名的主体没了,所以别名也就乱指了。
#5
宽心面2009-08-27 18:31
临时对象什么时候会被释放掉?
#6
xufen3402009-08-27 19:11
临时对象当然在函数结束后释放
#7
shyshit2009-08-27 20:08
回复 4楼 xufen340
真是谢谢你了!
1