2012年(158)
分类: C/C++
2012-11-23 16:36:40
#include <iostream>
using namespace std;
struct A

{
A()
{ cout << "A()" << endl; }
//A( const A& ) { cout << "A(A)" << endl ;}
A& operator=( const A& )
{ cout << "A=A" << endl; }
~A()
{ cout << "~A()" << endl; }
};
A foo( A a )

{
cout << "---" << endl;
return a;
}
int main(void)

{
{
foo( A() );
}
system( "pause" );
return 0 ;
}
网友评论2012-11-23 16:39:59
carr123
因为产生了3个对象,其中一个是显式的,另两个是临时的。
对象1 :A()
对象2: 因为A foo( A a )的参数不是引用,所以要产生一个栈内部的
对象
对象3: 因为foo( A a )的返回值不是引用,所以要产生一个临时的
对象
对象2和对象3是调用的拷贝构造函数,而你并没有写任何拷贝构造函数,
所以调用默认的。
注意:A& operator=( const A& ) { cout << "A=A" << endl; }
是赋值函数,不是拷贝构造函数。
这样写试试:
A::A(A& a)
{
cout<<"拷贝构造\n";
}