64,661
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
class A
{
public:
A(int a=0):a(a){printf("%p\n",this);};
A(const A& a){
printf("Constructor:%p\n",this);
this->a=a.a;
}
A& operator=(const A& a){
printf("Assignment:%p\n",this);
printf("a:%p\n",&a);
this->a=a.a;
return *this;
}
A max(A&a){
printf("this:%p\n",this);
return this->a > a.a?*this:a;
}
~A(){}
private:
int a;
};
int main(){
cout<<"a1:";
A a1(10);
cout<<"a2:";
A a2=a1;
cout<<"a3:";
A a3(20);
cout<<"--------------"<<endl;
a1 = a2.max(a3);
system("pause");
return 0;
}
/*result:
a1:003AF8A4
a2:Constructor:003AF898
a3:003AF88C
--------------
this:003AF898
Constructor:003AF7B4
Assignment:003AF8A4
a:003AF7B4 */
从这里可以看出在max返回的时候的确生成了一个临时的构造对象003AF7B4,最后由a1调用了赋值构造函数,把临时对象 kiss(003AF7B4)赋值给a1