当前位置: 首页> 文旅> 文化 > 网站建设云浪科技_免费在线网站模板_成全视频免费观看在线看_全专业优化公司

网站建设云浪科技_免费在线网站模板_成全视频免费观看在线看_全专业优化公司

时间:2025/7/11 7:40:55来源:https://blog.csdn.net/2201_75663820/article/details/146458188 浏览次数:0次
网站建设云浪科技_免费在线网站模板_成全视频免费观看在线看_全专业优化公司

目录

一.特殊类设计

1.设计一个类,不能拷贝。

2.设计一个类,只能在堆上创建对象。

3.设计一个类,只能在栈上创建对象。

4.实现一个类,该类不能被继承。

二.*设计模式

单例模式

1.饿汉模式 

2.懒汉模式


一.特殊类设计

1.设计一个类,不能拷贝。

将拷贝构造和赋值重载用delete禁掉(C++11);或将构造设为私有(C++98)

2.设计一个类,只能在堆上创建对象

方法一:堆上的对象特点:手动释放资源(析构),而其他对象都是自动生命周期结束后,自动调用析构函数,所以仅需将析构函数设为私有,然后在public中写一个能够释放资源的成员函数即可。

方法二:将构造函数、拷贝构造、赋值重载设为私有,写一个public的静态成员函数(return new tmp;),去调构造。

3.设计一个类,只能在栈上创建对象。

方法:将构造函数封死,用静态成员函数+拷贝构造创建对象。但是,若 new 创建对象时,不是用默认构造初始化,而是用拷贝构造初始化,则也能创建堆上的对象。所以,我们需要对operator new 进行重载,将operator new 禁用掉。

4.实现一个类,该类不能被继承。

方法:①用fianl修饰类(C++11); ②构造函数私有化(C++98)

为什么构造函数私有化能让一个类不能被继承?

--- 基类中的私有成员对于派生类而言“不可见”,而继承时,派生类必须要先调用基类的构造函数,由于派生类无法访问基类中“不可见”的成员,所以基类构造失败。

二.设计模式

啥是设计模式,或者说设计模式有什么用?

设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。就像人类历史发展会产生兵法,最开始人类部落之间打仗都是人数对拼,后来到了春秋战国,七国之间经常打仗,就发现打仗也是有套路的,后来孙子著兵法,总结打仗的套路。

设计模式的意义:为了代码的可重用性更高、代码更容易被他人理解、保证代码的可靠性。设计模式使用代码编写真正工程化。设计模式是软件工程的基石脉络,如同大厦的结构一样。

*单例模式

一个类只能创建一个对象,即单例模式。单例模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。

比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其它对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。

单例模式有两种实现方式,即懒汉模式和饿汉模式~ ~

单例模式的核心:构造函数私有化 + 私有静态单例对象 + 获取单例对象公有接口。

1.饿汉模式 

特点:在进入main()函数之前,就创建单例对象(仿佛抢不着饭吃,饿死鬼似的)。

在main()函数的外面对静态单例对象实例化,程序启动时,就会在进入main()函数之前就为单例对象开辟资源。

由于单例对象是在类的内部生命的,所以单例对象实例化时,可以访问私有的构造函数。

为防止单例类的拷贝、定义新对象等操作,我们需要将拷贝构造、赋值重载给禁掉。

假设我们想让一份unordered_map类型的资源在整个进程的生命周期中只有一份,就可以将其封装为单例类,具体代码如下:

饿汉模式的缺点:

①如果单例对象初始化内容很多,会影响程序的启动速度;

②如果两个单例类,要求A先创建,B再创建,B的初始化依赖A,无法保证A和B的初始化顺序;

2.懒汉模式

特点:会在进入main()函数之后,当我们调用GetInstance()接口时,才对单例对象实例化。

实现机制:将单例对象设为指针类型,当我们调用GetInstance()时,才对指针开辟空间。

代码如下(仍为保证unordered_map中的资源全局只有一份):

关键字:网站建设云浪科技_免费在线网站模板_成全视频免费观看在线看_全专业优化公司

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: