C 如何只在堆 棧上建立類的物件

2021-09-07 13:45:03 字數 768 閱讀 2512

建構函式私有化

將類的建構函式私有,拷貝構造宣告成私有。防止別人呼叫拷貝在棧上生成物件。

提供乙個靜態的成員函式,在該靜態成員函式中完成堆物件的建立。

class heap_only

priivate:

//c++98 類的構造和拷貝構造只宣告不定義a(

);a(

const a&);

//c++11下的新寫法a(

)=delete;a(

const a&

)=delete;

};

void

test()

只能在棧上建立物件,即不能在堆上建立,因此只要將new的功能遮蔽掉即可,即遮蔽掉operator new和定位new表示式。

注意:遮蔽了operator new,實際也將定位new遮蔽掉。相關概念之前的文章中都有較詳細的表述

**如下:

class stack_only

private:

void

* operator new

(size_t size)

;void operator delete

(void

*p);

};

void

test()

做法很簡單,只要清楚相關的語法原理就會很容易理解了。

c 只在堆和只在棧上建立物件

首先,分享一篇講解的很詳細的文章 其次,說下這裡面涉及到的一些基礎知識 c 的記憶體分配,類的成員函式的訪問修飾符。物件在記憶體中可以儲存在堆上也可以儲存在棧上。靜態建立的物件在棧上,好處是棧空間的申請效率高 編譯器有直接處理的指令 作業系統會幫助管理變數的記憶體,當超出作用域後會被直接析構掉,不用...

如何只在堆或者棧上分配類物件

2015 08 13 13 42 315人閱讀收藏 舉報 c c 61 昨天乙個同學去網易面試c 研發,問到了這麼乙個問題 如何限制乙個類物件只在棧 堆 上分配空間?一般情況下,編寫乙個類,是可以在棧或者堆分配空間。但有些時候,你想編寫乙個只能在棧或者只能在堆上面分配空間的類。這能不能實現呢?仔細想...

如何建立乙個類只能在堆(棧)上建立物件

在c 中,類物件的建立方式有兩種,一種是靜態建立類物件,如a a 另一種是動態建立類物件,如a p new a 這兩種方式是有區別的 靜態建立類物件 是指全域性物件,靜態物件,以及分配在棧區域內的物件,編譯器對它們的記憶體分配是在編譯階段就完成的,是通過直接移動棧頂指標,挪出適當的空間,然後在這片記...