C++拷贝构造

在类成员为基本类型情况下,编译器默认提供的拷贝构造函数直接进行值拷贝,是不存在深浅拷贝问题。

如下即使注释掉运算符重载 和 自己编写的拷贝构造函数,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 }

 

posted @ 2022-04-21 14:31  小小林林  阅读(45)  评论(0编辑  收藏  举报