#include <iostream>
using namespace std;
class A
{
public:
~A(){cout<<"析构\n";}
A(){w=1;cout<<"构造\n";}

A(A &a){cout<<"复制构造函数\n";w=a.w;}

int get()const{return w;}

A fget(){return *this;}

private:
int w;

};


int main()
{

A a;
cout<<a.get()<<endl;

A c=a.fget();

return 0;
}

当有定义析构函数是输出调用了一次复制构造函数

构造
1
复制构造函数
析构
析构
Press any key to continue

#include <iostream>
using namespace std;
class A
{
public:
//~A(){cout<<"析构\n";}
A(){w=1;cout<<"构造\n";}

A(A &a){cout<<"复制构造函数\n";w=a.w;}

int get()const{return w;}

A fget(){return *this;}

private:
int w;

};


int main()
{

A a;
cout<<a.get()<<endl;

A c=a.fget();

return 0;
}


当注释析构函数是输出显示调用两次复制构造函数

构造
1
复制构造函数
复制构造函数
Press any key to continue

请高手解释为什么会这样?为什么不是都调用一次?