單件模式

liiinuuux發表於2016-08-18
將建構函式設為私有,用靜態函式初始化和返回全域性唯一的例項。
class one
{
private:
    static one* _o;
    int _i;
    one():_i(0){}
    ~one(){}
public:
    static one* get() {if(!_o)_o = new one; return _o;}
    void add(){_i++;}
    void pnt(){cout << _i << endl;}
};
one* one::_o = NULL;


int main()
{
    one* o1 = one::get();
    for(int i=0; ++i<100; o1->add());
    o1->pnt();

    one* o2 = one::get();
    o2->pnt();
    return 0;
}

單件模式在子程式見也是唯一的。
int main()
{
    one* o1 = one::get();
    o1->add();
    o1->add();
    if(fork() == 0)
    {
        one* o2 = one::get();
        printf("o2: %x\n", o2);
        o2->pnt();
        exit(0);
    }
    printf("o1: %x\n", o1);
    o1->pnt();
    return 0;
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26239116/viewspace-2123700/,如需轉載,請註明出處,否則將追究法律責任。

相關文章