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; }
  • 相关阅读:
    isteven-multi-select
    javascript学习之js对象和json对象(obj=JSON.parse(stu))
    jquery学习之路之元素类的切换toggle
    jquery学习之路之测验错题集
    jquery学习之路之核心函数
    jquery学习之路之选择过滤
    较完整的angularjs+bootstrap应用程序接口controller
    angularjs+requeirjs模块化的应用程序接口
    SIP协议参数详情
    SIP初步认识
  • 原文地址:https://www.cnblogs.com/kingDr/p/3422092.html
Copyright © 2011-2022 走看看