如何保證類的物件只在stack中被定義?

2021-10-07 23:50:19 字數 541 閱讀 6746

我們要從stack(堆)和heap(棧)的不同來看:在stack中系統自動呼叫析構函式對物件的記憶體進行釋放,而在heap中,只有當程式結束或者我們用delete時,系統才會呼叫析構函式釋放物件所佔的記憶體。

重點:我們只要把釋放記憶體的方式限定住了,也就限制住了物件被定義的位置。

**示例如下:

#include #include using namespace std;  

class cstudent  

;  public:  

void deleteobject(cstudent *stud) // 自定義釋放物件的函式  

//~cstudent();  

}  cstudent(string name, float mark)  

void output()  

};  

int main()  

注:我們在呼叫deleteobject()函式當中,程式當執行到delete時,系統呼叫私有析構函式對物件進行記憶體釋放。

C 如何只在堆 棧上建立類的物件

建構函式私有化 將類的建構函式私有,拷貝構造宣告成私有。防止別人呼叫拷貝在棧上生成物件。提供乙個靜態的成員函式,在該靜態成員函式中完成堆物件的建立。class heap only priivate c 98 類的構造和拷貝構造只宣告不定義a a const a c 11下的新寫法a delete a...

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

1.第一種說法 只在棧上 class stackonly 只在堆上 class heaponly heaponly 前者利用了c 的過載機制 訪問控制機制。後者利用了c 的訪問控制機制。前者過載了new運算子,並設為私有,因此,當用 new stackonly 時編譯器就會報錯。後者則將建構函式設為...

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

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