C++单例模式之析构

本文探讨了在C++中实现单例模式时如何处理析构问题。作者指出,简单地忽略资源释放不优雅,直接delete可能导致内存泄漏或错误。通过析构函数实现资源释放则会导致无限循环。文章提出了一种利用类内部静态变量实现自动释放资源的解决方案,并邀请读者进行讨论。

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

    话说,之前虽然分别看过《大话设计模式》以及《设计模式之禅》,但是对里面的各种设计模式总是处于看过就忘的状态,唯一拿得出手的,也就是个单例模式了,窃以为已经把单例模式用得溜溜的了,然而,面试时,碰到一个问题,尴尬了。

    “单利模式如何删除呢?”

    好吧,尴尬的问题,尴尬的答案,下面整理一下好了。

    第一反应是,会随着程序退出,进而整体释放,也就无所谓删除了,那么问题来了,假如在单例里面,打开了文件需要关闭呢?或者说是占用了资源需要释放呢?而且,无作为本身也不优雅,更别提有可能产生的‘当当当’的退出弹窗了。

    既然不理睬不行,那么,delete掉呢?

    好吧,几千行的代码中,可能还记得delete,那么上万行呢?十万行呢?要是忘了呢?乱了呢?多次释放呢?

    那么析构吧~像智能指针那样优雅的析构掉……于是就有了下面的更尴尬的代码:

Singleton::~Singleton()
{
	std::cout << "Singleton::~Singleton" << std::endl;
	if (m_Instance)
	{
		std::cout << "delete Singleton Instance" << std::endl;
		delete m_Instance;
		m_Instance = nullptr;
	}
}

    好吧,大神们肯定看出来了,析构里面delete掉自身的静态指针,而delete的过程会调用析构函数,析构继续调用delete....无限循环了!

    唉,脑袋抽搐的代码!

    都知道,像局部变量啦,在超出有效区以后,就会被自动释放掉,这也就是简单的智能指针的使用,还有种说法叫做RAII(资源获取即初始化)。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值