54 lines
1.0 KiB
C++
54 lines
1.0 KiB
C++
|
// 类的单例设计模式
|
|||
|
// 私有化构造函数和拷贝函数, 提供一个public的静态函数返回类的指针对象, 声明一个静态的类
|
|||
|
// 的指针对象。
|
|||
|
#include <iostream>
|
|||
|
#include <cstring>
|
|||
|
#include <cstdlib>
|
|||
|
|
|||
|
using namespace std;
|
|||
|
|
|||
|
class A // 单例的类: 类的对象运行期间有且只有一个对象
|
|||
|
{
|
|||
|
private:
|
|||
|
int x;
|
|||
|
A(int x) { this->x = x; }
|
|||
|
A(const A &other)
|
|||
|
{
|
|||
|
x = other.x;
|
|||
|
}
|
|||
|
|
|||
|
public:
|
|||
|
static A *getInstance(int x = 0)
|
|||
|
{
|
|||
|
if (instance == NULL)
|
|||
|
{
|
|||
|
instance = new A(x);
|
|||
|
}
|
|||
|
return instance;
|
|||
|
}
|
|||
|
void show()
|
|||
|
{
|
|||
|
cout << "x = " << x << endl;
|
|||
|
}
|
|||
|
|
|||
|
public:
|
|||
|
static A *instance;
|
|||
|
};
|
|||
|
|
|||
|
A *A::instance = NULL; // 定义初始化,在静态全局区
|
|||
|
|
|||
|
int main()
|
|||
|
{
|
|||
|
A *a1 = A::getInstance(20);
|
|||
|
a1->show();
|
|||
|
|
|||
|
A *a2 = A::getInstance();
|
|||
|
a2->show();
|
|||
|
cout << "a1 addr = " << a1 << endl;
|
|||
|
cout << "a2 addr = " << a2 << endl;
|
|||
|
|
|||
|
delete A::instance; // 释放单例对象的空间
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|