栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++类的单例模式浅谈

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++类的单例模式浅谈

单例模式是C++23种设计模式中最简单也是最常用的一种,类似于C语言中只创建一个结构体变量,即一个类只有对象,具有全局变量的特点,任何位置都可以调用这个对象,可以有效预防类有多个对象导致的调用混乱问题。 通过单例模式, 可以确保一个类只有一个实例被建立 ,也就是C++中定义全局的东西的一个通用做法。例:操作一个驱动文件,如摄像头驱动,不可多线程同时操作,所有的处理必须通过唯一的实例来进行。

单例模式需保证所创建对象的生命周期伴随程序始终,而非每次被赋值的对象都是局部变量,因为使用static声明静态变量是最佳选择。

C++中单例模式的创建方式有懒汉模式与饿汉模式,用类的实例化时刻加以区分。懒汉模式是延迟实例化,在调用时才进行实例化。饿汉模式是在创建时就进行实例化。

个人认为,由于跑Linux操作系统的机器动辄上G存储,因为虽然懒汉模式有节省资源的优点,但当下我们更倾向于从程序加载的速度上考虑,优先采用饿汉模式开发。

例程如下,众所周知,美丽国只有川普一个真皇。以下代码输出美国总统姓名:

#include 

using namespace std;

class PresidentInstance
{
public:
    PresidentInstance(){}   // 默认构造函数
    static PresidentInstance* GetPreInstance(void); // 获取静态对象Instance
    string name;
};

static PresidentInstance* Instance;                 // 声明静态对象Instance

PresidentInstance* PresidentInstance::GetPreInstance(void)
{
    if (NULL == Instance)
    {
        Instance = new PresidentInstance();
    }
    return Instance;
}

int main()
{
    PresidentInstance::GetPreInstance()->name = "Trump";  // 通过GetPreInstance()直接初始化实例对象为川普

    cout << "President of the United States of America is " << PresidentInstance::GetPreInstance()->name< 

输出如下:

President of the United States of America is Trump

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001984.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号