day_06_拷贝构造、拷贝赋值、静态成员
来源:互联网 发布:美国大选重新计票 知乎 编辑:程序博客网 时间:2024/06/01 07:11
- 十七拷贝构造和拷贝赋值
- 1深拷贝和浅拷贝
- 十八静态成员static
- 1静态成员变量
- 2静态成员函数
- 3单例模式
- 十七拷贝构造和拷贝赋值
十七、拷贝构造和拷贝赋值
1、深拷贝和浅拷贝
拷贝构造:
1)如果一个类包含指针形式的成员变量,缺省的拷贝构造函数只会复制指针本身,而不会复制指针所指向的内容,这种拷贝称为浅拷贝。
2)浅拷贝将导致不同对象间的数据共享,如果数据是在堆区,在析构时会引发"double free"
异常;
3)因此必须定义一个支持复制指针所指向内容的拷贝构造函数,即深拷贝。
拷贝赋值:
在类中编译器会提供一个缺省的拷贝赋值操作符函数,完成两个对象的赋值操作,但是和缺省拷贝构造类似,是浅拷贝。为了得到深拷贝的效果,必须自己定义一个支持深拷贝的拷贝赋值函数。
类型& operator=(const 类名& that){ 1)防止自赋值 2)分配新资源(类似买手机,新手机到了,再扔旧手机,更妥当些) 3)释放旧资源 4)拷贝新数据 5)返回自引用}
练习:实现string类
十八、静态成员(static)
1、静态成员变量
class 类名{ static 数据类型 变量; // 声明};数据类型 类名::变量 = 初值; // 定义和初始化
1)静态成员变量类似全局变量,内存在全局区,所以它不属于对象,也不能在构造函数中定义和初始化,需要在类的外部单独定义和初始化。
2)使用方法
类名::静态成员变量;
(常用)
对象.静态成员变量;
2、静态成员函数
class 类名{ static 返回类型 函数名(形参表){..};};
1)在静态成员函数中没有this指针;
2)使用方法:
类名::静态成员函数(实参表);
(常用)
对象.静态成员函数(实参表);
注意:
静态成员函数中只能访问静态成员,而在非静态成员函数既能访问静态成员,也能访问非静态成员。
3、单例模式
一个类只允许创建一个对象。
1)禁止在类的外部随意创建对象:私有化构造函数;
2)在类的内部自己维护唯一的对象:静态成员变量;
3)提供获取和访问该对象的方法:静态成员函数;
class A{ public: A& get(void){ return a; } private: A(void); A(const A&); static A a;};
4)创建方式:
a. 饿汉式:无论单例对象用或不用,程序启动即创建;
b. 懒汉式:单例对象用的时候再创建,不用时即销毁;
练习1:自己写一遍String的实现;
练习2:自己实现单例模式 . .
阅读全文
1 0
- day_06_拷贝构造、拷贝赋值、静态成员
- c++笔记04---构造拷贝函数,拷贝赋值运算符函数,静态成员变量
- 构造、拷贝构造、赋值
- 拷贝构造 赋值构造
- 拷贝构造和拷贝赋值
- 拷贝构造与拷贝赋值
- 构造&转换&拷贝&赋值
- 拷贝,赋值构造函数赋值
- 拷贝构造和赋值构造
- 类的基本成员函数实现(构造,拷贝构造,拷贝赋值,移动构造,移动赋值,析构)
- 拷贝构造和赋值重载,移动拷贝,赋值拷贝
- c++构造,拷贝构造,拷贝赋值,移动构造,移动赋值
- 拷贝构造-赋值构造-深拷贝-浅拷贝
- 拷贝构造函数 与 拷贝赋值函数
- 拷贝构造函数和拷贝赋值函数
- Cpp_拷贝构造与拷贝赋值
- C++之拷贝构造与拷贝赋值
- 赋值函数、拷贝构造函数
- sql基础拾遗
- 关于debug
- 临时文件
- mybatis对时间段查询以及转义字符
- java SimpleDateFormat线程安全
- day_06_拷贝构造、拷贝赋值、静态成员
- 集合框架——Map集合
- 轻量级文本代码编辑工具
- 【CodeForces】426Div2 B The Festive Evening
- Codeforces Round 834B-The Festive Evening
- 【机器学习PAI实践十二】机器学习算法基于信用卡消费记录做信用评分
- NYOJ 364 田忌赛马
- linux学习笔记(9)
- ABAP的子程序参数注意点