科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件C++中的Singleton类的实现

C++中的Singleton类的实现

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

ANSI C++中的 Singleton 实现说难不难,说容易也不容易,很多人写 ANSI C++的 Singleton class 都有错误。这篇文章讨论怎样在 ANSI c++中写 Singleton class, 希望对大家有帮助。

作者:CSDN 来源:CSDN 2007年9月15日

关键字: 软件

  • 评论
  • 分享微博
  • 分享邮件
对应的 SingletonAutoPtr.cpp 如下:



#include "SingletonAutoPtr.h"

#include <iostream>

//initial static member vars here

CSingletonAutoPtr* CSingletonAutoPtr::m_instance = NULL;

auto_ptr<CSingletonAutoPtr> CSingletonAutoPtr::m_auto_ptr;

/////////////////////////////////////////

// Construction/Destruction

/////////////////////////////////////////

CSingletonAutoPtr::CSingletonAutoPtr()

{

cout << "CSingletonAutoPtr::CSingletonAutoPtr()" << endl;

//put single object into auto_ptr object

m_auto_ptr = auto_ptr<CSingletonAutoPtr>(this);

}

CSingletonAutoPtr::~CSingletonAutoPtr()

{

cout << "CSingletonAutoPtr::~CSingletonAutoPtr()" << endl;

}

CSingletonAutoPtr* CSingletonAutoPtr::GetInstance()

{

//begin lock

//....

if(m_instance == NULL)

m_instance = new CSingletonAutoPtr();

//end lock

//...

return m_instance;



}

void CSingletonAutoPtr::Test()

{

cout << "CSingletonAutoPtr::Test()" << endl;

}

调用方法:



CSingletonAutoPtr* pSingleton = CSingletonAutoPtr::GetInstance();

pSingleton->Test();

写一个 C++ 中的 Singleton 需要这么费劲,大大出乎我们的意料。有很多人从未用过 auto_ptr,而且 std:auto_ptr 本身就并不完美,它是基于对象所有权机制的,相比之下,Apache Log4cxx 中有一个 auto_ptr, 是基于对象计数的,更为好用。只是为了用一个好的 auto_ptr 而不得不用 log4cxx , 对于很多项目来说,也不太好。当然了,ANSI C++ 的 STL 中 std:auto_ptr 对于写上面的例子已经足够用了。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章