zoukankan      html  css  js  c++  java
  • C++单例

    //单例模式。
    //为了确保只有一个实例,需要保护它的构造函数,拷贝构造函数以及赋值运算符重载函数,
    使其不能被公开调用,故声明为private权限。
    //一旦出现误操作,将会直接报错,避免无形中增加实例,
    造成不必要的错误。


    #include <iostream> using namespace std; class SingleTon { public: ~SingleTon(); static SingleTon* getInstance(); //获得一个实例 void print(); void setSingleTon(const int age); private: SingleTon(); //默认构造函数 SingleTon(const SingleTon& single); //拷贝构造函数 const SingleTon& operator=(const SingleTon& single);//赋值运算符重载函数 int Age; static SingleTon* instance; //唯一实例 }; SingleTon * SingleTon::instance = NULL; SingleTon::SingleTon() { Age = 99; cout << "SingleTon default constructor called !" << endl; } SingleTon::SingleTon(const SingleTon& single) { //cout << "SingleTon copy constructor called !" << endl;//正常情况下,这句话是不能被打印出的。 } const SingleTon& SingleTon::operator=(const SingleTon& single) { return *this; } SingleTon::~SingleTon() { //delete instance;//不能在此delete instance,会造成死循环 cout << "SingleTon destructor called!" << endl; } void SingleTon::setSingleTon(const int age) { Age = age; } SingleTon * SingleTon::getInstance() { if (instance == NULL) //控制单例 { instance = new SingleTon(); //cout << sizeof(*instance) <<endl; } return instance; } void SingleTon::print() { cout << "I wanna live to " << Age << endl; } int main() { SingleTon *s1 = SingleTon::getInstance(); SingleTon *s2 = SingleTon::getInstance(); //不再生成新的实例 s1->print(); s2->print(); cout << endl << endl; s1->setSingleTon(100); s2->print(); //改变的是同一个实例。 s1->print(); cout << endl << endl; s2->setSingleTon(120); s2->print(); s1->print(); delete s1; //调用析构函数,删除单例。 return 0; }
  • 相关阅读:
    $(function(){});和window.onload=function(){}的区别?
    DELETE和TRUNCATE的区别与联系
    SQL中count(*)和count(1)的区别
    泛型结构使用大全(泛型类、泛型接口)
    Stream流说明
    直接与非直接缓冲区
    Unix系统的五种I/O模型
    git使用方法
    linux下的系统调用函数到内核函数的追踪
    linux awk用法(主要为命令行)
  • 原文地址:https://www.cnblogs.com/kingDr/p/3422092.html
Copyright © 2011-2022 走看看