類只能生成棧物件(或只能生成堆物件)

2021-10-03 06:10:44 字數 1443 閱讀 9001

將運算子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...