永发信息网

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

答案:2  悬赏:0  手机版
解决时间 2021-01-26 05:53
用C++实现单件模式,即设计一个类,该类仅允许被实例化一次。并举例说明单件模式的应用领域。
最佳答案
C++单例模式也称为单件模式。使用单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出等。
单例模式有许多种实现方法,甚至可以直接用一个全局变量做到这一点,但这样的代码显得很不优雅。定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有静态方法获取该实例。
#include 
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()得到单实例对象指针,可以看到这个指针值是一样的,这也就反映了单实例类的特性。
另外,以上的示例只有对单例类的实例化构造,但没有释放。不过这可以使用其他方式保证,如利用系统对静态对象的销毁机制实现一个守卫类,在守卫类的析构函数中进行单例类的释放。
全部回答
static object a; static syncobject = new object(); public static object instance{     get {     lock(syncobject)     {     if(a ==null)     {     a = new object();     }     }     return a;     } }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
国债常见的赎回保护期是发行后()年。A.1~3B.
成语磕头如捣的意思是什么啊?有知道释义的请
手游问道挖宝图会涨经验吗?
现在的初中特长生的发展前景
像根拐杖,又可以坐的东西,哪里有卖?
新县信阳桑夏太阳能(潢河南路)地址在什么地方
Cl2+NaOH会倒吸么?
笔记本电脑重新系统恢复后进入登陆界面,键盘
自己放入手机的音乐在播放器里面不显示歌曲的
斗鱼鱼丸多少钱一个
电热开水器如何调水位
成语口呆目钝的意思是什么啊?有知道释义的请
【DO MO SI MI MA SA N ,好像是句泰语,好像,
羊角中心小学地址在什么地方,想过去办事
C语言中如何输出n个数每行两个?
推荐资讯
杭州有汽车去青岛郊南市吗
广东汕头哪里有塑胶模具厂招工?我会看图纸,
保卫萝卜2136关什么时候更新
成语浪酒闲茶的意思是什么啊?有知道释义的请
金运(承接产业转移集中示范园区南京路)地址在
六安民生汽车销售服务有限公司地址在哪,我要
千千静听的音乐列表文件名与原文件名不符
前孙村村地址在什么地方,我要处理点事
【高风亮节是什么意思】什么叫“高风亮节”?
高峰教育(上海金山区)地址在什么地方,我要处
时间是否可以无限分割
myhouseisverybig变为一般疑问句的答案
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?