#include<iostream>
using namespace std;
class A
{
int m;
public:
A(int m=0)
{
cout<<"一般构造函数\n";
}
A(const A &a)
{
m=a.m;
cout<<"拷贝构造函数\n";
}
void operator =(const A &a)
{
this->m=a.m;
cout<<"=重载\n";
}
~A(){cout<<"析构函数"<<endl;}
};
A fun(A &ob1)
{
return 2;
}
int main()
{
{
A ob1(1);
A ob2(fun(ob1));//调用一次<span style="font-family: Arial, Helvetica, sans-serif;">一般构造函数</span>
A ob3=fun(ob1);//调用一次<span style="font-family: Arial, Helvetica, sans-serif;">一般构造函数</span>
}
system("pause");
return 0;
}
定义ob1时调用一次构造函数,定义ob2和ob3时,看形式像是调用的拷贝构造函数,但实际上不是,用的是一般的构造函数,因为函数fun返回一个A对象,这个对象在函数返回后并没有析构,而是直接作为了ob2和ob3,在遇到大括号}时进行析构。