限定只能在棧或堆上執行個體化的類

來源:互聯網
上載者:User

今天面試遇到這樣一個問題,要求寫2個類    一個只能在棧上執行個體化   另一個只能在堆上執行個體化。

對此問題百思不得其解,面試結束,趕緊求解,深恐遺忘:

 

只能在堆上執行個體化

解構函式設定為私人或受保護的成員,在定義棧對象後,函數結束時,不能調用非公有解構函式,這時也應該提供Destroy(){ delete this },避免造成記憶體泄露。

class CHeapOnly{public:    CHeapOnly(){}    void Destroy() const    {        delete this;    }private:    ~CHeapOnly(){}};

只能在棧上執行個體化

即將new delete 操作符重載設定為非公有訪問方式。

class CStackOnly{public:    CStackOnly(){}    ~CStackOnly(){}private:    void* operator new(size_t size)    {    }    void operator delete(void * ptr)    {    }};

 

總結:實際上這兩個問題都很簡單,只是利用了函數成員最基本的訪問屬性 加以控制,但是面試的時候就是突然想不起來 ~~~~

           另外,我面試完剛出公司就突然想到了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.