1.概要
什么时候调用拷贝构造,就是有对象创建的时候,就会调用拷贝构造,无论对象是构造(类(来源))还是赋值(=对象)都会调用拷贝构造。
 赋值函数调用的时机是两个对象都已经创建完了,的情况下采用调用(a(已经创建)=b(已经创建))。
 调用拷贝赋值函数和拷贝对象的差别就在于目标函数是否已经创建了。如果创建了使用赋值函数,如果未创建使用拷贝构造。
2.代码
#include <iostream>
//拷贝构造函数实验
class A
{
public:A();~A();//A(const A&) = delete;A(const A& ia) {//*this = ia;this->a = ia.a;std::cout << "Copy construction \n";}A& operator=(const A& is) = delete;void fun() {std::cout << "my fun\n";}
private:int a = 5;
};A::A()
{
}A::~A()
{
}
void test1() {std::cout << "-----        A b(a)       ---------------\n";A a;A b(a);
}
void test2() {std::cout << "-----        A c = a      ---------------\n";A a;A c = a;
}
void test3() {std::cout << "-----        A* p_a = new A(a);      ---------------\n";A a;A* p_a = new A(a);
}
void test4() {std::cout << "-----        A* p_b = p_a;      ---------------\n";A a;A* p_a = new A(a);A* p_b = p_a;
}
void test5() {std::cout << "-----        A  d = *p_a      ---------------\n";A* p_a = new A();A  d = *p_a;
}
int main()
{test1();test2();test3();test4();test5();std::cout << "Hello World!\n";
}3.运行结果
-----        A b(a)       ---------------
Copy construction
-----        A c = a      ---------------
Copy construction
-----        A* p_a = new A(a);      ---------------
Copy construction
-----        A* p_b = p_a;      ---------------
Copy construction
-----        A  d = *p_a      ---------------
Copy construction
Hello World!