今天打算打算討論關於內存分配,兩個比較有意思的話題,咱們如何作到自定義對象禁止在堆上分配空間,又如何作到只在堆上分配空間,其實作法很簡單,只是巧妙地利用了C++
語言提供的特性。
咱們先來談第一個話題,如何禁止對象在堆上分配內存segmentfault
其實作法很簡單,咱們只要重載了本身的成員operator new
和operator 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
在某些場合下,咱們可能鼓勵使用對分配內存,爲此,咱們只須要將析構函數聲明爲private
便可對象
struct HeapOnly { void release() { delete this; } private: ~HeapOnly() {} };
注意,咱們上面提供了public
接口release
,用來銷燬對象。接口