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; }
  • 相关阅读:
    Chrome控制台JS设置xpath定位
    logging.exception
    python去除换行和空格
    从剪切板获取的内容无法使用type函数得到数据类型
    python获取剪切板的内容
    hdoj Radar Installation
    hdoj- Windows Message Queue
    hdoj-看病要排队
    hdoj-1896 stones
    评委会打分
  • 原文地址:https://www.cnblogs.com/kingDr/p/3422092.html
Copyright © 2011-2022 走看看