标签:函数 class 模式 delete names 构造 opera ptr default
单例模式
概念:只能创建一个对象的类
实现关键: 1、所有构造函数都必须是private的(包括带参构造,拷贝构造,赋值运算符)
2、通过static成员函数申请对象空间,并返回地址
3、定义一个静态标记,记录对象的个数,并控制
4、析构函数将标记清空,以达到重复申请对象的目的,析构函数是public的
5、赋值运算符、拷贝构造函数也必须是private的,由于编译器默认合成的赋值运算符和拷贝构造函数都是public的,所以这两个函数都要人为定义,而不能由编辑器默认合成
代码实现:
1 #include <iostream> 2 3 using namespace std; 4 5 class Single 6 { 7 private: //由于单例模式下所有构造函数都必须是private的,但编译器默认合成的所有构造函数都是public的, 8 Single() = default; //所以此时所有构造函数都要人为定义一遍 9 Single(const Single&) = default; 10 Single& operator=(const Single&) = default; 11 12 public: 13 static int flag ; 14 static Single* creat(); 15 ~Single() //析构函数是public的 16 { 17 flag = 0; 18 } 19 }; 20 21 int Single::flag = 0; 22 23 Single* Single::creat() 24 { 25 if (flag == 0) 26 { 27 flag = 1; 28 return (new Single); 29 } 30 else 31 return nullptr; 32 } 33 34 35 int main() 36 { 37 Single *p1 = Single::creat(); //创建一个对象 38 delete p1; //销毁此对象 39 40 Single *p2 = Single::creat(); //正确:由于之前的对象已经被销毁,所以可以创建一个新对象 41 Single *p3 = Single::creat(); //错误:该类只能存在一个唯一对象,故此时p3被创建为nullptr 42 43 return 0; 44 }
标签:函数 class 模式 delete names 构造 opera ptr default
原文地址:https://www.cnblogs.com/FengZeng666/p/9345986.html