标题:小例子里面的大文章
只看楼主
炼雪无痕
Rank: 1
等 级:新手上路
帖 子:8
专家分:6
注 册:2011-8-27
结帖率:100%
 问题点数:0 回复次数:3 
小例子里面的大文章
#include<iostream>
using namespace std;
class A
{
public:
    A()
    {
        cout<<"A created."<<endl;

    }
    A(A& a)
    {
        cout<<"A creted with copy "<<endl;
    }
    ~A()
    {
        cout<<"A destroyed."<<endl;
    }
};
A foo(A  a)
{
    A b;
    return b;
}
int main()
{

    A a;
    a= foo(a);
    return 0;
}

偶尔看到的一个程序,我感觉挺好的。
搜索更多相关主题的帖子: public 文章 
2012-07-22 16:48
炼雪无痕
Rank: 1
等 级:新手上路
帖 子:8
专家分:6
注 册:2011-8-27
得分:0 
它会输出
A created.
A creted with copy
A created.
A creted with copy
A destroyed.
A destroyed.
A destroyed.
A destroyed.
2012-07-22 16:52
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
楼主应该解释解释为什么会构造了4个A。
2012-07-22 18:15
炼雪无痕
Rank: 1
等 级:新手上路
帖 子:8
专家分:6
注 册:2011-8-27
得分:0 
food()函数的参数和返回值是通过值传递的,在调用函数和返回值时,分别要把实参复制一份,压入栈中。
因此再调用food()时,需要构造一个a的副本,所以调用A的copy构造函数,创建一个临时对象,在返回时,也要构造b的临时对象。这两个临时对像在函数调用返回后被自动销毁。
2012-07-22 19:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-373892-1-1.html




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

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