一、ClassTest ct1("ab");这条语句属于直接初始化,它不须要调用复制构造函数,直接调用构造函数ClassTest(const char *pc),因此当复制构造函数变为私有时,它仍是能直接执行的。
二、ClassTest ct2 = "ab";这条语句为复制初始化,它首先调用构造函数ClassTest(const char *pc)函数建立一个临时对象,而后调用复制构造函数,把这个临时对象做为参数,构造对象ct2;因此当复制构造函数变为私有时,该语句不能编译经过。
三、ClassTest ct3 = ct1;这条语句为复制初始化,由于ct1原本已经存在,因此不须要调用相关的构造函数,而直接调用复制构造函数,把它值复制给对象ct3;因此当复制构造函数变为私有时,该语句不能编译经过。
四、ClassTest ct4(ct1);这条语句为直接初始化,由于ct1原本已经存在,直接调用复制构造函数,生成对象ct3的副本对象ct4。因此当复制构造函数变为私有时,该语句不能编译经过。