版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40568527/article/details/83591569
用常量对一个对象a进行赋值时,比如a=20这条语句,会生成一个临时对象(没有名字的临时对象),然后用常量作为参数调用类型转换构造函数对这个临时对象进行初始化,之后将这个临时变量的值赋给对象a,且在a=20这条语句结束后立刻释放临时对象的内存。以下代码可以体现这一点:
#include<stdio.h>
struct A{
public:
int a;
int b;
public :
A()
{
printf("A() is called\n");
}
A(double a)//由这个函数的输出表明这个函数的this指针并不指向对象a而指向的是一个临时对象
{
printf("调用类型转换构造函数者的a和b:%d %d\n",this->a,this->b);
this->a=a;
printf("A(double a) is called\n");
printf("调用类型转换构造函数者初始化后的a和b:%d %d\n",this->a,this->b);
}
A(A& a)
{
printf("A(A&a) is called\n");
}
~A()
{
printf("~A() is called\n");
}
};
int main()
{
A a;//调用无参构造函数
a.b=1;
a.a=0;
printf("赋值前对象a中a与b分别为:%d %d\n",a.a,a.b);
a=20;//调用类型转换构造函数
//在a=20结束处调用析构函数析构临时对象
printf("赋值后对象a中a与b分别为:%d %d\n",a.a,a.b);
getchar();
}