实现步骤:
1.将构造函数声明为类的私有成员 private;
2.通过静态成员函数申请对象空间 ,并返回地址;
3.定义一个静态变量标记,记录对象的个数,该静态成员变量是开关变量,通过控制这个静态标记达到控制只创建一个对象的目的;
4.在析构函数中,将静态变量标记置成1,达到重复利用该静态变量标记目的;
源代码:
#includeusing namespace std; // 单例模式,一个类只能创建一个对象 class Cbase { // 1.声明一个私有的类构造函数 private: Cbase() { cout << "我是类的私有构造函数n"; } public: // 2. 声明一个静态变量标记,用于控制类对象的创建 static char flag; // 类的静态成员函数必须在类外进行初始化 // 3.声明一个共有的静态类指针成员函数,返回类的地址空间, // 目的:创建类对象可以通过类名作用域调用这个静态指针函数 static Cbase* function() { // 通过判断标记变量flag 进行函数的返回操作 if (1 == flag) { // 将标记置成0,达到开关变量目的 cout << "成功创建对象n"; flag = 0; // 返回类的地址空间 return new Cbase; } else { // 直接返回空 cout << "已经有一个对象了,不能在进行创建新的对象了,请释放当前对象,已达到再一次创建对象目的n"; return NULL; } } // 4.在析构函数中将静态变量标记flag置成1,达到重复利用目的 public: ~Cbase() { flag = 1; } }; // 初始化类的静态成员变量 char Cbase::flag = 1; // 注意初始化的时候需要用类名作用域 int main(int argn, char* argv[]) { // 创建类的对象 (指针) const Cbase* pt = Cbase::function(); // 注意要用类名作用域调用类的静态指针成员函数 // 尝试不释放类指针对象,进行创建对象 const Cbase* pt2 = Cbase::function(); system("pause"); return 0; }
程序运行结果1:
源代码2:
int main(int argn, char* argv[])
{
// 创建类的对象 (指针)
const Cbase* pt = Cbase::function(); // 注意要用类名作用域调用类的静态指针成员函数
delete pt; // 释放
// 尝试不释放类指针对象,进行创建对象
const Cbase* pt2 = Cbase::function();
delete pt2;
system("pause");
return 0;
}
程序运行结果2:



