如何限制乙個類物件只在堆上分配或者只在棧上分配?

2021-06-18 01:35:46 字數 961 閱讀 6455

1.第一種說法

//只在棧上

class

stackonly

};//

只在堆上

class

heaponly

~heaponly(){}

};

前者利用了c++的過載機制+訪問控制機制。後者利用了c++的訪問控制機制。

前者過載了new運算子,並設為私有,因此,當用 new stackonly;時編譯器就會報錯。

後者則將建構函式設為私有,因此,當你 heaponly h;時會自動呼叫建構函式,這時編譯器也會報錯。

這種技巧在c++中是很常用的比如設計模式中的單件模式。

2. 第二種說法

只在棧上的類:

//私有過載new即可,但只是限制了不能建立在new出的堆上,並沒有限制全域性以及區域性靜態類,因此嚴格

//來說不能算「只在棧上」

class

a;

};

c/c++ code

只在堆上的類:

//私有化析構函式,通過乙個public函式來進行實際的析構。

classb;

private

:

~b(){};

};

3. 第三種說法

1 在c++中如何限制乙個類物件只在堆上分配?

仿照設計模式中的單例項模式或者工廠模式來解決,這裡採用單例項模式方式來說明。

將類的建構函式屬性置為private,同時提供static成員函式getinstance,在函式中new乙個新物件,然後返回物件指標或者引用。這樣實現的類可以保證只可以在堆上分配物件。

2 在c++中如何限制乙個類物件只在棧上分配?

過載類的new操作符,使過載後的new操作符的功能為空。這樣就使外層程式無法在堆上分配物件,只可以在棧上分配。

限制乙個類物件只在棧(堆)上建立

1.只在堆中建立 編譯器在為類物件分配棧空間時,會先檢查類的析構函式的訪問性,如果類的析構函式是私有的,則編譯器不會在棧空間上為類物件分配記憶體。因此,將析構函式設為私有,類物件就無法建立在棧上了。這樣就只能使用new操作符來建立物件,建構函式是公有的,可以直接呼叫。類中必須提供乙個destory函...

如何讓類物件只在棧(堆)上分配空間?

一般情況下,編寫乙個類,是可以在棧或者堆分配空間。但有些時候,你想編寫乙個只能在棧或者只能在堆上面分配空間的類。這能不能實現呢?仔細想想,其實也是可以滴。在c 中,類的物件建立分為兩種,一種是靜態建立,如a a 另一種是動態建立,如a ptr new a 這兩種方式是有區別的。1 靜態建立類物件 是...

C 限制乙個類只能在堆上或棧上分配

方法一 只在棧上class stackonly 只在堆上class heaponly heaponly 前者將過載new運算子並限制為私有,後者將建構函式私有。方法二 只在堆上分配 將類的建構函式屬性置為private,同時提供static成員函式getinstance,在函式中new乙個新物件,然...