面试题2:实现Singleton模式

本文围绕单例模式展开,介绍其要求,即类在内存中只能有一个实例且为堆对象。阐述了实现步骤,如将构造函数私有化等。还提及单例对象的自动释放方法,以及生成栈对象和堆对象的要求。最后说明了单例模式节省内存、提高性能等优点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现Singleton模式(要求熟练掌握)

https://blog.youkuaiyun.com/justloveyou_/article/details/64127789

单例模式的要求:类在内存中只能有一个实例

1.该对象不能是全局对象或者栈对象

2.该对象是一个堆对象

 

静态成员函数与普通成员函数的区别:https://blog.youkuaiyun.com/liujianfei526/article/details/50562881

 

单例模式的实现步骤:

1.将构造函数私有化

2.在类中定义一个静态的指针对象,并在类外初始化为空

3.定义一个返回值为类指针的静态成员函数,如果2中的指针对象为空,则初始化对象,以后再有对象调用该静态成员函数的时候,不在初始化对象,而是直接返回对象,保证类在内存中只有一个实例

 

单例对象的自动释放:

法一:嵌套类+静态对象

基类先创建,派生类后创建

嵌套类先创建,本类后创建

法二:atexit+destroy()

法三:pthread_once + atexit

pthread_once方法的作用:在多线程环境之下,其注册的函数只会被执行一次

 

生成对象的要求:

1.只能生成栈对象的方法:不能生成堆对象,不能通过new表达式在类之外生成对象

<1>将构造函数放入private区域

<2>operator new函数放入到private区域(采用)

但是要创建对象要求构造函数必须在public区域,故不能把构造函数放入private区域

所以只可以把operator new/delete函数private化

 

2.只能生成堆对象的方法:不能生成栈对象,不能在类之外调用构造函数或者析构函数

<1>将构造函数放到private区域(无法生成堆对象)

<2>将析构函数放到private区域

a)对于堆对象而言,执行delete表达式无法通过编译

b)在public区域定义一个destroy()(采用)

 

单例模式的代码:在虚拟机的C++_2019的目录下自己进行查看。

 

单例模式具有以下几个优点:

  • 在内存中只有一个对象,节省内存空间;
  • 避免频繁的创建销毁对象,可以提高性能;
  • 避免对共享资源的多重占用,简化访问;
  • 为整个系统提供一个全局访问点

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值