私人解構函式 Android 程式碼分析

來源:互聯網
上載者:User

有人說聲明 Private Destructor, 這對象只能在 stack 上建立,不能在Heap上建立, 其實錯了, 這樣的程式編譯都過不了. 那為何會有 Private Destructor, 因為程式是這樣寫的 ------------------------------------class Base {public:    Base();protected:    virtual ~Base();    friend class Base_Friend;}; ------------------------------------class Child : public Base{public:    Child();private:    virtual ~Child();}; 如此可以達到2個目的1) 只能通過 delete base  才能調用 Child的Destructor2) Child 不能再有 子類了  看看Android 的  Refbase 和 Overlay 的關係  class Overlay : public virtual RefBase{...private:    virtual ~Overlay();} class RefBase{    public decStrong();...protected:                            RefBase();    virtual                ~RefBase();    } 注意到 ~RefBase(); 是 protected, 那個如何 delete RefBase 呢?  原來它提供 decStrong() 方法, 要刪除對象只有通過這個方法了void RefBase::decStrong(const void* id) const{       ....       delete this;       ....} RefBase 是提供給 wp<T> 和 sp<T> 使用的, 這種方法說明了RefBase不希望外部程式才進行對象new delete 管理  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.