將運算子new/delete進行過載,並放到private區域中,這樣就不能通過new建立類的堆物件了。
#include
#include
#include
using std::cout;
using std::endl;
class
student
;student::
student()
student::
~student()
void
* student::
operator
new(size_t n)
void
* student::
operator
new[
](size_t n)
void student::
operator
delete
(void
* del)
}void student::
operator
delete
(void
* del)
}int
main()
注意到這裡申請堆空間和棧空間的乙個差別:
1.student s1
申請棧空間時,建構函式與析構函式都必須放在public區域裡面,如果將~student
放在private
區域,由於析構函式是自動呼叫的,所以student s1
語句會顯示錯誤;
2.student *s2 = new student()
申請堆空間時,就算將~student()
放在private
區域也沒關係,因為申請的堆空間必須主動delete
掉才行
3.但是注意:直接呼叫析構函式已經是不可能,因為析構函式已經在private
區域內部;
所以需要在類內部建立destory
函式,這樣在destory
函式內部使用delete就可以被動呼叫析構函式了
#include
#include
#include
using std::cout;
using std::endl;
//1.過載new和delete,內部實現用malloc和free
class
student
;student::
student()
student::
~student()
void student::
destory()
}int
main()
只能在堆上生成的物件 VS 只能在棧上生成的物件
1.只能在堆上 即禁止在棧上生成。如何實現?當物件建立在棧上面時,是由編譯器分配記憶體空間的,呼叫建構函式來構造棧物件。如果類的析構函式是私有的,則編譯器不會在棧空間上為類物件分配記憶體。所以,只需把類的析構函式宣告為private即可禁止該類在棧上生成物件。但是別忘了提供乙個public的函式用於...
只能在堆或棧上建立物件?
1.只能在堆 heap 上建立物件 禁止產生棧 stack 物件 建立棧物件時會移動棧頂指標以 挪出 適當大小的空間,再在這個空間上直接呼叫對應的建構函式以形成乙個棧物件,而當函式返回時會呼叫其析構函式釋放這個物件,再調整棧頂指標收回那塊棧記憶體 在這個過程中是不需要operator new del...
只能生成乙個例項的類
這次遇到的是乙個c 問題,本著迎難而上精神雖然c 不熟但是盤它就行了。問題如下 用linux編譯c 需要先搭建環境,那就先搭建乙個吧。搭建環境有好多坑,根據以下內容可以完成並且解決各種問題 還有就是4版本以上的,只能用mcs命令編譯 搭建好之後可以開始寫 了,對c 不太熟悉先了解一些基礎概念 1 s...