C++: 单例模式和缺陷
2020-11-22 21:27
标签:des http class div code c t tar sp strong string 实现一个单例模式 修改程序如下: 我们看到Singleton::destructor被明确的执行了。 C++: 单例模式和缺陷,搜素材,soscw.com C++: 单例模式和缺陷 标签:des http class div code c t tar sp strong string 原文地址:http://www.cnblogs.com/lidabo/p/3701101.htmlC++: 单例模式和缺陷
1
class
Singleton {
2
private
:
3
Singleton() { cout
"Singleton::constructor"
4
~Singlton() { cout
"Singleton::destructor"
5
Singleton(
const
Singleton&) {};
6
Singleton &operator=(
const
Singleton&) {};
7
public
:
8
static
Singleton* getInstance() {
9
if
(m_aInstance == NULL) {
10
m_aInstance =
new
Singleton();
11
}
12
return
m_aInstance;
13
}
14
void
show() {
15
cout
"Singleton::show"
16
}
17
private
:
18
static
Singleton* m_aInstance;
19
};
20
21
Singleton* Singleton::m_aInstance = NULL;
22
23
int
main(
int
argc,
char
**argv) {
24
Singleton* aSingleton = Singleton::getInstance();
25
aSingleton->show();
26
return
0;
27
}
Singleton::constructor
Singleton::show
系统会自动调用在栈和静态数据区上分配的对象的析构函数来释放资源。
1
class
Singleton {
2
private
:
3
Singleton() { cout
"Singleton::constructor"
4
~Singleton() { cout
"Singleton::destructor"
5
Singleton(
const
Singleton&) {};
6
Singleton &operator=(
const
Singleton&) {};
7
public
:
8
static
Singleton* getInstance() {
9
if
(m_aInstance == NULL) {
10
m_aInstance =
new
Singleton();
11
}
12
return
m_aInstance;
13
}
14
void
show() {
15
cout
"Singleton::show"
16
}
17
18
private
:
19
class
Garbage{
20
public
:
21
~Garbage() {
22
if
(m_aInstance != NULL) {
23
delete
m_aInstance;
24
}
25
}
26
};
27
28
private
:
29
static
Singleton* m_aInstance;
30
static
Garbage m_garbage;
31
};
32
33
Singleton* Singleton::m_aInstance = NULL;
34
Singleton::Garbage Singleton::m_garbage;
35
36
int
main(
int
argc,
char
**argv) {
37
Singleton* aSingleton = Singleton::getInstance();
38
aSingleton->show();
39
return
0;
40
}
Singleton::constructor
Singleton::show
Singleton::destructor