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

小例子里面的大文章

炼雪无痕 发布于 2012-07-22 16:48, 332 次点击
#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;
}

偶尔看到的一个程序,我感觉挺好的。
3 回复
#2
炼雪无痕2012-07-22 16:52
它会输出
A created.
A creted with copy
A created.
A creted with copy
A destroyed.
A destroyed.
A destroyed.
A destroyed.
#3
pangding2012-07-22 18:15
楼主应该解释解释为什么会构造了4个A。
#4
炼雪无痕2012-07-22 19:51
food()函数的参数和返回值是通过值传递的,在调用函数和返回值时,分别要把实参复制一份,压入栈中。
因此再调用food()时,需要构造一个a的副本,所以调用A的copy构造函数,创建一个临时对象,在返回时,也要构造b的临时对象。这两个临时对像在函数调用返回后被自动销毁。
1