构造函数和赋值运算函数的区别
构造函数
构造函数调用的时机有两个,初始化 和 new。
-
初始化
比如:
Player P0; // 默认构造函数 Player P1 = Player(); // 默认构造函数 Player P2(P0); // 拷贝构造函数 Player P3 = P0; // 拷贝构造函数 Player P4(std::move(P0)); // 移动构造函数 Player P5 = std::move(P0); // 移动构造函数前两行初始化的方式是等价的,都是调用了Player的默认构造函数。
关键的地方在于,即使我们在其中使用了=,它调用的也不是赋值运算符函数,而是构造函数。
new就不用多说了。
赋值运算函数
赋值运算函数就是我们重写的(或者自动的)operator=函数。
赋值运算函数调用的时机,在非初始化处使用=。
P6 = P0; // 拷贝赋值运算函数
P7 = Player(); // 移动赋值运算函数
补充:自动赋值运算符是浅拷贝所有变量的值
结论
两者的区别在于调用的时机不同:
- 凡是初始化的地方,无论是否有=,调用的都是构造函数。此时,=并不能看作赋值运算符。
- 凡是非初始化的地方使用=,调用的是赋值运算函数。此时,=就是赋值运算符。

被折叠的 条评论
为什么被折叠?



