您的位置:首页 > 编程语言 > C语言/C++

c++单例三种实现

2015-10-14 10:56 295 查看
c++实现一:

#include <iostream>
#include <cstdio>
#include <pthread.h>
#include <unistd.h>
#include <cstdlib>

class Singleton
{
public:
static Singleton* getInstance();

private:
static Singleton* Instance;
Singleton(){}
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
};

Singleton* Singleton::Instance = NULL;
Singleton* Singleton::getInstance()
{
if(Instance == NULL)
{
Instance = new Singleton();
}
return Instance;
}

int main(int argc, char *argv[])
{
Singleton* instance_a = Singleton::getInstance();
Singleton* instance_b = Singleton::getInstance();

if(instance_a == instance_b)
std::cout << "OK" << std::endl;

return 0;
}


第二种实现方式:

#include <iostream>
#include <cstdio>
#include <pthread.h>
#include <unistd.h>
#include <cstdlib>

class Singleton
{
public:
static Singleton* Instance;
static Singleton* getInstance()
{
return Instance;
}
private:
Singleton(){}
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
};

Singleton* Singleton::Instance = new Singleton();

int main(int argc, char *argv[])
{
Singleton* instance_a = Singleton::getInstance();
Singleton* instance_b = Singleton::getInstance();

if(instance_a == instance_b)
std::cout << "OK" << std::endl;

return 0;
}


第三种实现方式:

#include <iostream>
#include <cstdio>
#include <pthread.h>
#include <unistd.h>
#include <cstdlib>

class Singleton
{
public:
Singleton(){}
static Singleton* Instance;
static void InitSingleton() { Instance = new Singleton();}
static Singleton* getInstance();
private:
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
};

static pthread_once_t once = PTHREAD_ONCE_INIT;
Singleton* Singleton::Instance = NULL;

Singleton* Singleton::getInstance()
{
pthread_once(&once, Singleton::InitSingleton);
return Instance;
}

int main(int argc, char *argv[])
{
Singleton* instance_a = Singleton::getInstance();
Singleton* instance_b = Singleton::getInstance();

if(instance_a == instance_b)
std::cout << "OK" << std::endl;

return 0;
}
pthread_once函数:

int pthread_once(pthread_once_t *once_control, void (*init_routine) (void))

这个函数使用初值为PTHREAD_ONCE_INIT的once_control变量保证init_routine()函数在本进程执行序列中仅执行一次。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: