1. 拷贝初始化和直接初始化区别

类型 形式 说明
直接初始化 ClassTest ct1(“ab”) 它不需要调用复制构造函数,直接调用构造函数ClassTest(constchar *pc),
所以当复制构造函数变为私有时,它还是能直接执行的。
ClassTest ct4(ct1) 因为 ct1 本来已经存在,直接调用复制构造函数,生成对象 ct3 的副本对象 ct4。
所以当复制构造函数变为私有时,该语句不能编译通过。
复制初始化 ClassTest ct2 = “ab” 它首先调用构造函数 ClassTest(const char* pc) 函数创建一个临时对象,
然后调用复制构造函数,把这个临时对象作为参数,构造对象ct2;所以当复制构造函数变为私有时,该语句不能编译通过。
ClassTest ct3 = ct1; 因为 ct1 本来已经存在,所以不需要调用相关的构造函数,而直接调用复制构造函数
把它值复制给对象 ct3;所以当复制构造函数变为私有时,该语句不能编译通过。

2. 初始化和赋值的区别

2.1. 调用的函数不同

初始化:调用构造函数。

赋值:调用复制构造函数。

2.2. 是否创建临时对象

初始化:不创建。

赋值:传入形参时,创建。

Copyright © ershouche-FE 2019 all right reserved,powered by Gitbook文件修订时间: 2022-02-28 13:28:54

results matching ""

    No results matching ""