控制對象的內存分配

今天打算打算討論關於內存分配,兩個比較有意思的話題,咱們如何作到自定義對象禁止在堆上分配空間,又如何作到只在堆上分配空間,其實作法很簡單,只是巧妙地利用了C++語言提供的特性。
咱們先來談第一個話題,如何禁止對象在堆上分配內存segmentfault

1. 禁止堆上分配內存

其實作法很簡單,咱們只要重載了本身的成員operator newoperator delete函數以後,並將其訪問權限設爲私有便可,對於這兩個函數不熟悉的讀者能夠參考個人另外一篇文章《淺析內存分配》函數

struct HeapProhibit {
private:
  void* operator new(size_t size) { return NULL; }
  void operator delete(void*) {}
};

C++2.0之後,更加推薦下面的寫法this

struct HeapProhibit {
  void* operator new(size_t size)  = delete;
  void operator delete(void*) = delete;
};

下面咱們看看第二個話題,如何強制在堆上分配內存code

2. 強制在堆上分配內存

在某些場合下,咱們可能鼓勵使用對分配內存,爲此,咱們只須要將析構函數聲明爲private便可對象

struct HeapOnly {
  void release() { delete this; }

private:
  ~HeapOnly() {}
};

注意,咱們上面提供了public接口release,用來銷燬對象。接口

相關文章
相關標籤/搜索