1. 程式人生 > >如何限制堆物件的生成?如何限制棧物件的生成?

如何限制堆物件的生成?如何限制棧物件的生成?

禁止產生堆物件
  • 產生堆物件的唯一操作是使用 new 操作,通過禁止使用 new 就可以禁止產生堆物件。(如何禁止呢?)
  • new 操作執行時會呼叫 operator new, 而 operator new 是可以過載的。方法有了,就是使 operator new 為 private ,為了對稱,最好將 operator delete 也過載為 private
禁止產生棧物件
  • 建立棧物件時不需要向堆申請記憶體,而是直接移動棧頂指標以挪出適當大小空間,然後在這個空間上直接呼叫對應的建構函式以形成一個棧物件;而當函式返回時,會呼叫其解構函式釋放這個物件,然後再調整棧頂指標回收那塊棧記憶體
  • 方法:將建構函式或解構函式設為私有的,這樣系統就不能呼叫建構函式/解構函式在棧中生成物件了