关于C++构造函数的疑问

求助关于C++构造函数的疑问
#include<iostream>
using namespace std;
class A
{
public:
A():m(10)
{
cout<<"constuctor A is called!"<<endl;

}
int m;
};
A fun(A a)
{
cout<<"fun &a="<<&a<<endl;

return a;

}
int main()
{
A a;
a=fun(a);
cout<<"main &a="<<&a<<endl;

}
运行结果:
constuctor A is called!
fun &a=0012FF28;
main &a=0012FF7C
疑问1:
上述程序似乎为什么产生了两个对象,却只调用了一次构造函数?
疑问2:
上述程序应该产生了三个对象,1、执行语句 A a
2、用a对象初始化fun中的形参;
3、返回 fun 中局部对象 a时 应该会产生 一个临时对象
对于上述疑问,恳请高手解答,感激不尽!

------解决方案--------------------
要点提示:
1. 复制构造函数
2. RVO
------解决方案--------------------
 class A
 {
 public:
 A():m(10)
 {
 cout<<"constuctor A is called!"<<endl;
 }
 A(const A&){cout<< "A(const A&)" <<endl;}
 A& operator =(const A&) {cout<< "operator =(const A&)" <<endl;return *this;}
 int m;
 };
将A类改成这样,你就明白了!