C 物件建立僅限於堆或堆疊

Mondo 科技 更新 2024-02-12

如何限制類的物件只能在堆上建立? 如何限制僅在堆疊上建立物件?

注意:在 C++ 中為類建立物件有兩種型別:靜態建立,動態建立

靜態建立:編譯器在堆疊空間上為物件分配記憶體,並直接呼叫類的建構函式來建立物件。 例如:a a;

動態建立:使用 new 關鍵字在堆空間上建立乙個物件,底層首先呼叫運算元 new() 函式在堆空間上找到合適的記憶體並分配; 然後,呼叫類的建構函式來建立物件。 例如:a *p = new a();

受限制的物件只能在堆上生成:

最直觀的想法:避免直接呼叫類的建構函式,因為當物件是靜態建立的時,會呼叫類的建構函式來建立物件。 但是,將類的建構函式設為私有是不可行的,因為當建構函式設定為私有時,不能在類外部呼叫建構函式來構造物件,只能新呼叫建構函式來構造物件。 但是,由於在建立物件時,類的建構函式也是在 new 的底部呼叫的,因此在將建構函式設定為 private 之後,無法使用 new 在類之外建立物件。 因此,這種方法是不可行的。 解決方法 1:

將析構函式設定為私有。原因:靜態物件建立在堆疊上,編譯器分配和釋放記憶體空間,編譯器為物件分配記憶體空間時,檢查類的非靜態函式,即編譯器檢查析構函式的可訪問性。 當析構函式設定為 private 時,編譯器建立的物件無法訪問析構函式來釋放物件的記憶體空間,因此編譯器不會為堆疊上的物件分配記憶體。

class a void destory() private: ~a()
該方法的問題:

使用 new 建立的物件通常使用 delete 來釋放物件的記憶體空間,但析構函式不能從類外部呼叫,因此必須在類中定義乙個 destory() 函式來釋放由 new 建立的物件。 沒有辦法解決繼承問題,因為如果將類用作基類,則將析構函式設定為虛擬,然後在派生類中重寫函式以實現多型性。 但是在這一點上,析構函式是私有的,在派生類中不可訪問。 解決方法 2:

將建構函式設定為 protected,並提供 public 的靜態函式來完成構造,而不是在類外部使用新構造; 將析構函式設定為 protected。 原因:與單一例項模式類似,析構函式保證在派生類中可訪問。 通過呼叫 create() 函式在堆上建立乙個物件。

class a ~a() public: static a *create() void destory()
受限制的物件只能在堆疊上構建:

解決辦法:將運算子 new() 設定為 private。 原因:當乙個物件在堆上構建時,它是以一種新的方式建立的,底層會呼叫運算子 new() 函式,所以只要函式受到限制,就可以阻止該物件在堆上構建。

類 a 注意函式的第乙個引數和返回值是固定的: void operator delete(void *ptr) { 如果過載 new,則需要過載 delete public: a() a()。

相關問題答案

    C 是面向過程的或物件導向的

    C 是一種多正規化程式語言,支援面向過程和物件導向的程式設計。以下是 C 的特徵 面向過程的程式設計 .程式 程式主要由一系列按一定順序執行的程序 或功能 組成。.資料與函式分離 資料與函式分離,函式主要用於操作資料。物件導向程式設計 .封裝 將資料和操作資料的方法封裝在乙個單元中,向外部隱藏實現細...

    C919死了?美國技術限制只是暫時的,國內客機仍有光明的未來

    近日,有訊息稱,中國航空工業發展史上乙個重大影響 C客機的研發可能夭折。但是,我們不必對這一訊息過於悲觀。事實上,從目前的情況來看,美國的技術限制只是暫時的,而國內客機的前景仍然光明。基於自主創新之路,中國航空工業展現出了強大的研發能力和堅定的決心。無論是技術實力的提公升,還是市場需求的擴大,都為國...

    欣克利角C揭示了建立薩默塞特鹽沼的計畫

    布里奇沃特附近Pawlett Hams擬建的鹽沼將有益於當地的野生動植物和生物多樣性。法國電力公司位於英國薩默塞特郡的欣克利角C核電站正在就帕雷特河上建造多英畝鹽沼的計畫徵求建議。在布里奇沃特附近的波利瑟姆 Pollithams 擬建的鹽沼將為魚類和動物創造新的棲息地,改善當地的水質,並有助於防止洪...

    侃爺準備在中東建立自己的城市,“YZY DROAM”,占地10萬英畝

    據外媒最新訊息,侃爺正計畫在中東打造自己的城市 YZY Droam 這座城市占地 , 英畝 約 平方公里 幾乎是巴黎的四倍。週三 當地時間 侃爺進行了招聘 尋找專案經理 工程師 建築師和承包商,以幫助他在中東建造一座新城市。根據招聘截圖 該市目前處於 第一階段 占地萬英畝,約為巴黎的四倍,紐約的一半...

    男人約相親在村口見面,看到這套衣服後,他納悶你不冷嗎

    相親是年底無法迴避的話題。無論是在城市還是在農村,美少女搶一把,女人的美取決於外表,七取決於穿著,在網際網絡的加持下,越來越多的農村女孩喜歡精緻的風格。不知從什麼時候開始,村里的姑娘們開始 卷 相親,為了得到相親男嘉賓的青睞,展現自己最好的一面。比如下面河南平頂山的發文,攝影師表示,回到村里後,他答...