設計乙個只能在堆上或棧上例項化的類

2021-07-10 02:03:44 字數 1088 閱讀 1718

**:

一道c++筆試題:設計乙個只能在堆記憶體上例項化的類和乙個只能在棧記憶體上例項化的類

只能在堆記憶體上例項化的類:將析構函式定義為private,在棧上不能自動呼叫析構函式,只能手動呼叫。也可以將建構函式定義為private,但這樣需要手動寫乙個函式實現物件的構造。

只能在棧記憶體上例項化的類:將函式operator new和operator delete定義為private,這樣使用new操作符建立物件時候,無法呼叫operator new,delete銷毀物件也無法呼叫operator delete。

#include using

namespace

std;

//只能在堆記憶體上例項化的類

class

cheaponly

void destroy() const

private

: ~cheaponly()

};//

只能在棧記憶體上例項化的類,就是不能使用new來構造類,把operator new私有化

class

cstackonly

~cstackonly()

private

:

void* operator

new(size_t size)

void

operator delete(void *ptr)

};int

main()

下面乙個類也只能在堆記憶體上生成,將建構函式和析構函式都定義為private,但是可以通過類的static函式建立物件,不過這個物件是不能被繼承的。

#include using

namespace

std;

//只能在堆記憶體上例項化的類

class

finalclass

static

void deleteinstance(finalclass*pinstance)

private

: finalclass() {}

~finalclass() {}

};int

main()

設計乙個只能在堆上或棧上的類

一道c 筆試題 設計乙個只能在堆記憶體上例項化的類和乙個只能在棧記憶體上例項化的類 只能在堆記憶體上例項化的類 將析構函式定義為private,在棧上不能自動呼叫析構函式,只能手動呼叫。也可以將建構函式定義為private,但這樣需要手動寫乙個函式實現物件的構造。只能在棧記憶體上例項化的類 將函式o...

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

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

如何定乙個只能在堆上或者只能在棧上定義的類

c 中,物件的建立分為兩種,一種是靜態建立,如a a 另一種是動態建立,如 a ptr new a 靜態建立 由編譯器為物件在棧上分配記憶體,是通過直接移動棧頂指標,挪出適當的空間,然後在這片記憶體空間上呼叫建構函式形成乙個棧物件,使用這種方法,直接呼叫類的建構函式 動態建立 是通過new運算子將物...