天天看點

effective c++ 條款15 在資源管理類中提供對原始資源的通路

總看看書上的例子感覺很沒有成就感,深思述略了一下“資源管理類”,看到“資源”我想起了廁所,無論是在宿舍還是在公司裡廁所的資源都是有限的,有考慮到自己接觸的廁所都是比較低端的那種,也就是說隻能通過關門和開門來表示是否有人,于是我的類産生了,如下:

 測所類:

class WC
{
public:
    WC(){};
    void doorClose()
    {
        std::cout << "I am here!"<< std::endl;
    }
    void doorOpen()
    {
        std::cout<< "you can come in!" << std::endl;
    }
    ~WC(){};
private:
    
}      

廁所管理者(資源管理類):

class WcAdmin{
public:
      WcAdmin(WC *p);
      ~WcAdmin();
private:
     WC *wc;
}

WcAdmin::WcAdmin(WC *p):wc(p)
{
    wc->doorClose();
}
~WcAdmin::WcAdmin()
{
    wc->doorOpen();
}      

資源管理類的角色就是幫助廁所關門和開門,進而告訴我們廁所是否可用。

中午到了:

清掃廁所的阿姨要向廁所管理者要廁所來打掃,假如阿姨的函數如下:

void clean(WC *ptr);

如果向上面描述的廁所管理者是不合格的,他不知道自己負責廁所是哪一個了,沒事吸煙了。勤勞的阿姨可定會向總管告狀,然後他就被開除了。合格的廁所管理如下:

class WcAdmin{
public:
      WcAdmin(WC *p);
      ~WcAdmin();
      void get()
      {
        return wc;
      }
private:
     WC *wc;
}

WcAdmin::WcAdmin(WC *p):wc(p)
{
    wc->doorClose();
}
~WcAdmin::WcAdmin()
{
    wc->doorOpen();
}