请选择 进入手机版 | 继续访问电脑版

环信

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: mmap uikit gcc
查看: 273|回复: 0

C++范例: Singleton单例模式

[复制链接]

42

主题

68

帖子

229

积分

中级会员

Rank: 3Rank: 3

积分
229
发表于 2016-1-21 10:08:05 | 显示全部楼层 |阅读模式

  1. #include <iostream>

  2. using namespace std;

  3. class Singleton{

  4. private:
  5.     int data;
  6.     static Singleton s;//饱汉模式
  7.     Singleton(int i =0) : data(i){
  8.         cout<<"Singleton()"<<endl;
  9.     }

  10.     Singleton(const Singleton& s){
  11.         cout<<"Singleton(copy)"<<endl;
  12.     }
  13. public:
  14.     ~Singleton()
  15.     {
  16.         cout<<"~Singleton()"<<endl;
  17.     }

  18.     static Singleton* getInstance(){
  19.         //static Singleton s;//发生了拷贝构造函数 //饿汉模式
  20.         //cout<<"s:"<<&s<<endl;
  21.         return &s;
  22.     }

  23.     void show()
  24.     {
  25.         cout<<this<<endl;
  26.     }
  27. };

  28. Singleton Singleton::s;//饱汉模式

  29. class A{
  30. public:
  31.     A(){

  32.     }

  33.     A(const A& aaa){
  34.         cout<<"A(copy)"<<endl;
  35.     }
  36.     static fn(A aa, A ab)
  37.     {
  38.         //A aa = a2;
  39.         //A ab = a3;
  40.     }
  41.     static fn1(A& aa, A& ab)//避免拷贝,
  42.     {
  43.         //A& aa = a2;
  44.         //A& ab = a3;
  45.     }
  46.     static A gn()//编译器优化了(不是全部C++编译器会优化),编程inline函数
  47.     {
  48.         A a;
  49.         //static A a;//如果是static就会调用拷贝构造函数,或者外部有个全局的A a也会调用,取决于生命周期
  50.         return a;
  51.     }
  52. };

  53. int main()
  54. {
  55.     Singleton* ps1 = Singleton::getInstance();
  56.     Singleton* ps2 = Singleton::getInstance();
  57.     ps1->show();
  58.     ps2->show();

  59.     //Singleton s3 = *ps1;//调用拷贝构造函数,没有封死创建对象的路
  60.     //详单相当于:Singleton s3(*ps1);
  61.     //s3.show();

  62.     //调用拷贝构造函数的情况:
  63.     A a1;
  64.     A a2(a1);
  65.     A a3 = a2;
  66.     A::fn(a2, a3);
  67.     A::fn1(a2, a3);
  68.     A a4 = A::gn();//没有调用拷贝构造函数, 相当于A a4 = A();
  69.     return 0;
  70. }

复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|环信 Glofty.com ( 粤ICP备15084637号 )

GMT+8, 2017-4-28 23:52 , Processed in 0.221841 second(s), 22 queries .

快速回复 返回顶部 返回列表