CPP类与对象
1、浅拷贝与深拷贝区别?
-
浅拷贝:只拷贝指针地址,导致两个指针指向同一块内存空间。cpp默认拷贝构造函数是浅拷贝,这在没有指针时是可行的,但当数据成员有指针时,如果仅采用浅拷贝,则两个指针指向同一堆内存。一个对象被析构后,会造成另一对象的指针悬挂。
-
深拷贝:会在堆内存中另外申请一段空间来存储数据。
2、当定义类时,编译器会为类自动生成哪些函数?这些函数各自都有什么特点?
构造函数:
- 函数名与类名相同,无返回值,可传参,可重载。
- 完成数据成员初始化。
- 默认构造函数无参。
- 初始化表达式:初始化顺序只与数据声明顺序有关。
析构函数:
- 函数名与类名相同,并带一取反符号,不可传参,唯一,不可重载。
- 完成对象销毁,执行清理任务。
拷贝构造函数:
1. 默认浅拷贝
2. 调用时机:已存对象复制给一个新对象、形参和实参都是对象、函数返回值是对象
3. 参数为 const 类名&
a、必须是引用,否则符合调用时机(形参和实参都是对象),无限调用自己。
b、必须是const,为实现左值引用和右值的绑定
赋值构造函数:
- 返回值必须是引用,否则调用拷贝构造函数,增大开销
- 返回值必须