C++笔记问题整理(二)-------设计模式
总结一下遇到的问题,和可能遇到的面试题目。
1.什么是设计模式?
2.什么是单例模式?
3.在单例模式中,什么是懒汉模式,什么是饿汉模式,二者有什么区别?
4.在单例模式中,不考虑多线程的情况下,如何保证一个类只创建一个实例,除了这一种,还有哪种方法能禁止类生成对象?
5.用C++举一个单例模式的例子?
参考答案
1.什么是设计模式?
设计模式是一种经验的传承,是被前人发现,经过总结形成的一套某一类问题的一般性解决方案,而不是被设计出来的定性规则,它不像算法那样可以照搬照用。
经典设计模式一共23种,由于水平有限下面只介绍其中几种。
2.什么是单例模式?
单例模式,顾名思义,只有一个例子,是一种常用的软件设计模式。其核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。
单例模式的特点:
1.只有一个例子。
2.提供了一个对象的全局访问指针(放在public里面),这个指针被所有模块共享。
3.单例模式允许将来有更多的实例(可扩充性)。
3.在单例模式中,什么是懒汉模式,什么是饿汉模式,二者有什么区别?
懒汉模式这个名字还挺有趣的,顾名思义懒汉,就是指等用到这个例子的时候才会实例化对象,
饿汉模式正好相反,因为饥饿,当单例类定义的时候就实例化好了。
从以上的定义可以看出,懒汉模式消耗的时间更多,而饿汉模式消耗的空间更多。
所以:
访问量比较大,或线程比较多的时候,运行时间较长,适合用饿汉模式,
访问量较小时,运行时间短的时候,可以用懒汉模式。
4.在单例模式中,不考虑多线程的情况下,如何保证一个类只创建一个实例,除了这一种,还有哪种方法能禁止类生成对象?
单例模式通过将构造函数设置为类的私有成员((或保护成员)的方式来禁止通过类通过一般的构造函数生成新对象。
除此之外,抽象类也能禁止类实例化。
即在类中加入纯虚函数,就是在函数前面加个virtual,后面不定义函数,加个=0,写法如下:
class Example
{
virtual int function1(int a)=0;
…
};
5.用C++代码分别写出懒汉模式、饿汉模式和加锁后的单例模式代码?
单例模式除了构造函数私有化外,还要保证能有一个可以全局调用的接口。
懒汉模式如下:
class Singleton1
{
private:
Singleton1(){}
static Singleton1 *psig;
public:
static Singleton1* GetInstance()
{
if(psig==nullptr)
{
psig=new Singleton1();
}
return psig;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本