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乙個新物件,然...