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; }
  • 相关阅读:
    BZOJ2821 作诗(Poetize) 【分块】
    BZOJ2724 蒲公英 【分块】
    Codeforces 17E Palisection 【Manacher】
    BZOJ2565 最长双回文串 【Manacher】
    Codeforces 25E Test 【Hash】
    CODEVS3013 单词背诵 【Hash】【MAP】
    HDU2825 Wireless Password 【AC自动机】【状压DP】
    HDU2896 病毒侵袭 【AC自动机】
    HDU3065 病毒侵袭持续中【AC自动机】
    HDU2222 Keywords Search 【AC自动机】
  • 原文地址:https://www.cnblogs.com/kingDr/p/3422092.html
Copyright © 2011-2022 走看看