关于 Singleton 模式中的析构 浅析

本文详细介绍了如何使用C++实现Singleton模式,确保整个应用程序中只有一个类实例存在,并提供全局访问点。文章强调了构造函数、析构函数声明为private的重要性,禁用了客户端直接实例化此类的操作,并展示了如何通过GetInstance函数安全地获取类实例。

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

今天要写一个C++的singleton模式的类,开始参考网上其他兄弟写的类,发现不能删除客户端创建出来的指针,又经过一翻研究总结如下,


1.构造函数 析构函数 要声明private: 不让客户端实例化此类(例如: DXHelper helper;  DXHelper *pHelper = new DXHelper() 都是禁止的)

2.不能进行赋值或者拷贝构造操作。 //声明copy和赋值 操作重载函数为private并且没有实现。

3. 只能通过本类提供的GetInstance函数得到类的实力 并且调用其成员

4.在GetInstance()中定义局部变量 这样能自动销毁,不存在内存泄漏问题



#pragma once


// include directx9
#include <d3d9.h>


class DXHelper
{
public:
static DXHelper &GetInstance()
{
static DXHelper instance;  \\ 局部变量 自动销毁, 不存在内存泄漏问题
return instance;
}


private:
DXHelper()
{
// set the constructor is private so that the client can‘t instance this class directly
}


~DXHelper(void)
{
}


DXHelper(const DXHelper&) ;// Prevent clients from copying a Singleton 
DXHelper& operator=(const DXHelper&) ;;// Prevent clients from  assignment 


Public:

void DoSomething();

};




客户端代码:

DXHelper::GetInstance().DoSomething();  // 只能通过此种方法调用,其他一切方便都会出现编译错误。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值