1
上面不执行复制构造函数,17行将10000赋值给a:首先是进行类型转换转化为类(等价18行),然后调用构造函数创建一个临时对象,
并将该临时对象赋给a.
2.
对func函数:
接收的实参是主函数中a的副本,因此调用复制构造函数并将a的副本赋给func的形参one.
返回的是one的副本,因此又要调用复制构造函数将one的副本返回给主函数
这是复制构造函数的两种使用情况:按值(对象)接收和按值(对象)返回
3.
23行调用复制构造函数来构造对象b
这是复制构造函数的第三种情况.
复制构造函数也可以构造对象.
4.谭浩强C++:
对象的赋值或者复制只针对其中的数据成员赋值,不对成员函数赋值,显然如果类的数据成员中包含动态分配的数据或指向动态分配的指针的话
当析构完原对象时,被赋值或者复制的对象中对应的数据成员会出现找不到原堆中空间的问题.
对象的赋值是在对一个已经存在的对象赋值,因此必须先定义被赋值的对象,然后才能进行赋值.
对象的复制则是从无到有地建立一个新对象,并使它与一个已有的对象完全相同(包括对象的结构和成员的值),也就是说在创建对象的同时
并用一个对象对该对象初始化.
5.普通构造函数与复制构造函数
被调用情况:普通构造函数在程序中建立对象时被调用
复制构造函数在用已有对象对复制一个新对象时被调用