C++单例模式应用实例

2025-05-29 0 39

本文实例讲述了C++单例模式及其相关应用方法,分享给大家供大家参考。具体方法分析如下:

定义:

一个类有且仅有一个实例,并且提供一个访问它的全局访问点。
要点:
1、类只能有一个实例;
2、必须自行创建此实例;
3、必须自行向整个系统提供此实例。

实现一:单例模式结构代码

singleton.h文件代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14
#ifndef _SINGLETON_H_

#define _SINGLETON_H_

class Singleton

{

public:

static Singleton* GetInstance();

protected:

Singleton();

private:

static Singleton *_instance;

};

#endif

singleton.cpp文件代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24
#include "singleton.h"

#include <iostream>

using namespace std;

Singleton* Singleton::_instance = 0;

Singleton::Singleton()

{

cout<<"create Singleton ..."<<endl;

}

Singleton* Singleton::GetInstance()

{

if(0 == _instance)

{

_instance = new Singleton();

}

else

{

cout<<"already exist"<<endl;

}

return _instance;

}

main.cpp文件代码如下:

?

1

2

3

4

5

6

7

8

9
#include "singleton.h"

int main()

{

Singleton *t = Singleton::GetInstance();

t->GetInstance();

return 0;

}

实现二:打印机实例

singleton.h文件代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16
#ifndef _SINGLETON_H_

#define _SINGLETON_H_

class Singleton

{

public:

static Singleton* GetInstance();

void printSomething(const char* str2Print);

protected:

Singleton();

private:

static Singleton *_instance;

int count;

};

#endif

singleton.cpp文件代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33
#include "singleton.h"

#include <iostream>

using namespace std;

Singleton* Singleton::_instance = 0;

Singleton::Singleton()

{

cout<<"create Singleton ..."<<endl;

count=0;

}

Singleton* Singleton::GetInstance()

{

if(0 == _instance)

{

_instance = new Singleton();

}

else

{

cout<<"Instance already exist"<<endl;

}

return _instance;

}

void Singleton::printSomething(const char* str2Print)

{

cout<<"printer is now working , the sequence : "<<++count<<endl;

cout<<str2Print<<endl;

cout<<"done\\n"<<endl;

}

main.cpp文件代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12
#include "singleton.h"

int main()

{

Singleton *t1 = Singleton::GetInstance();

t1->GetInstance();

t1->printSomething("t1");

Singleton *t2 = Singleton::GetInstance();

t2->printSomething("t2");

return 0;

}

Makefile文件:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16
CC=g++

CFLAGS = -g -O2 -Wall

all:

make singleton

singleton:singleton.o\\

main.o

${CC} -o singleton main.o singleton.o

clean:

rm -rf singleton

rm -f *.o

.cpp.o:

$(CC) $(CFLAGS) -c -o $*.o $<

运行效果如下图所示:

C++单例模式应用实例

可以看到,对打印顺序count的计数是连续的,系统中只有一个打印设备。

希望本文所述对大家的C++程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 C++单例模式应用实例 https://www.kuaiidc.com/107161.html

相关文章

发表评论
暂无评论