在类成员为基本类型情况下,编译器默认提供的拷贝构造函数直接进行值拷贝,是不存在深浅拷贝问题。
如下即使注释掉运算符重载 和 自己编写的拷贝构造函数,main 函数依然可以正常运行。
类成员非基本类型且不包含拷贝构造 和运算符重载功能,编译器直接进行值拷贝会出错;在指针情况下只会拷贝指针地址值,代码异常。
1 #define PMSG(msg) {std::cout << msg << std::endl;} 2 3 class Top 4 { 5 public: 6 std::string name; 7 int age; 8 Top() = default; 9 Top(std::string name, int age) 10 :name(name), age(age) 11 { 12 PMSG("参数构造 函数调用"); 13 } 14 15 /* 16 拷贝构造函数 17 */ 18 Top(const Top& ob) 19 { 20 name = ob.name; 21 age = ob.age; 22 PMSG("拷贝构造 函数调用"); 23 } 24 25 /* 26 运算符重载 27 */ 28 void operator=(const Top& ob) 29 { 30 name = ob.name; 31 age = ob.age; 32 PMSG("运算符重载 函数调用"); 33 } 34 }; 35 36 int main() 37 { 38 Top a; 39 Top b("cxl", 32); 40 a = b; 41 Top c(a); 42 43 PMSG(a.name); 44 45 PMSG(c.name); 46 c.name = "hello"; 47 PMSG(c.name); 48 49 PMSG(a.name); 50 51 PMSG(c.age); 52 }