问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用C++实现单件模式,即设计一个类,该类仅允许被实例化一次。并举例说明单件模式的应用领域。

发布网友 发布时间:2022-06-28 08:14

我来回答

1个回答

热心网友 时间:2023-10-31 00:01

C++单例模式也称为单件模式。使用单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出等。

单例模式有许多种实现方法,甚至可以直接用一个全局变量做到这一点,但这样的代码显得很不优雅。定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有静态方法获取该实例。

#include <iostream>
using namespace std;

class Singleton
{
public:
    static Singleton* Instance();
    void SetValue(int value);
    int GetValue();
private:
    int* pVal_;
private:
    Singleton();
    ~Singleton();
    static Singleton* s_pInstance_;
};

Singleton* Singleton::Instance()
{
    if(NULL == s_pInstance_)
        s_pInstance_ = new Singleton;

    return s_pInstance_;
}

void Singleton::SetValue( int value )
{
    if(NULL == pVal_)
        pVal_ = new int;

    *pVal_ = value;
}

int Singleton::GetValue()
{
    if(NULL == pVal_)
        return 0;
    return *pVal_;
}

Singleton::Singleton():pVal_(NULL)
{
}

Singleton::~Singleton()
{
    if(NULL != pVal_)
        delete pVal_;
}

Singleton* Singleton::s_pInstance_ = NULL;

int main(int argc, char* argv[])
{
    Singleton* s = Singleton::Instance();
    s->SetValue(10);
    cout << s->GetValue() << endl;

    return 0;
}

你可以在另外的类方法或者线程函数中直接使用Singleton类的公有方法Instance()得到单实例对象指针,可以看到这个指针值是一样的,这也就反映了单实例类的特性。

另外,以上的示例只有对单例类的实例化构造,但没有释放。不过这可以使用其他方式保证,如利用系统对静态对象的销毁机制实现一个守卫类,在守卫类的析构函数中进行单例类的释放。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
倩碧黄油适合哪种肤质的人使用? 倩碧有哪些护肤品比较受女性青睐? 倩碧紧致面霜适合哪些肤质的人使用? 倩碧护肤品适合什么肤质使用? 哪些肤质的人适合使用倩碧卓越润肤乳? 学校发的移动卡,套餐38的送一年宽带 现在卡不想用了,貌似宽带合约没到期... ...我居住浙江,有一个广西的移动卡,移动卡上还捆绑有宽带 我现在在外地我想注销移动卡或者联通卡怎么注销,回不到办卡的地方。 上海最建议去三个景点 为什么叫北京鸭篮球 JAVA中什么是单件模式?如何实现单件模式? 单件模式的介绍 trace board 电子白板怎样校准 哪里有tracepro的教学视频啊 显示为了我的账号安全,此不能登陆网页微信是为什么啊? 那个网站才是正宗的:中国金融理财网? 郑州有中国理财网么? 呲怎样读,意思是什么 呲花的呲字怎么打? 决呲入归鸟的第二个字如何发音? 吡拉西坦的呲字怎么读 呲怎么读音是什么 “呲”的读音是什么? 什么是通用网址? 什么叫通用网址?在哪里查询?它和网络实名怎么区别? 隐退或者退出,最简短的翻译比较合适?在线等答复. 离休和退休这两个词怎么翻译成英文 退休英语翻译百度翻译 华峰化学为什么连跌?华峰化学什么时候出半年报?002064 华峰化学诊股? 华峰化学为什么十年不涨?2021一季度华峰化学业绩?002064华峰化学搜狐网? C# 在单件模式时,如何及时销毁不需要的对象 成长守护平台QQ登不了怎么回事?- 问一问 成长守护平台怎么登陆不上QQ啊- 问一问 成长守护平台绑定了我自己的,但是我想用自己的QQ号登录怎么办? 手机版NBA2k2020王朝模式 休赛期任务中选秀就卡住了 一直点都没反应? 这是怎么回事(nba2k20手机版)? 火车上可以带活螃蟹吗 遇到困难绝对不会退缩,个性很强不放弃的星座有哪些? 家庭常用保鲜袋不可以重复使用,网上说因为细菌残留。硅胶材质的保鲜袋可以请洗干净重复使用吗? 无限流量是真的吗 什么惊什么寒的成语 成语什么惊什么寒 什么惊什么寒四字成语 心惊胆寒成语龙 什么惊什么寒成语 什么惊什么寒,两个什么那儿应该填那两个字? 3dmax用vray渲染器支持光追吗? 电瓶车电池如何修复 如何修复电瓶车电池 一则“男子分手后起诉女友还钱胜诉”的新闻引热议,恋爱花销分手后该还吗?