C 設計乙個類,只能在棧 堆 上建立物件

2021-08-21 12:40:22 字數 786 閱讀 6444

設計乙個類,只能在棧上建立物件

使用new運算子,物件會建立在堆上,也就是說只要不用new去建立物件就可以實現,我們知道new和delete分別呼叫了operator new和operator delete,如果我們把這兩個函式宣告為私有的,操作符new就不能用了。

class a

~a()

private:

void* operator

new(size_t size){};

void

operator

delete(void *ptr) {};

};int main()

設計乙個類,只能在堆上建立物件

使用new運算子,物件就可以在堆上建立。如果我們將建構函式和析構函式定義為protected(可以讓類被繼承),然後定義兩個公有的靜態函式呼叫new和delete,來建立和銷毀物件。

class a

~a()

public:

static a* construct()

static

void destroy(a *p)

};int main()

還有一種方法是將析構函式宣告為私有的。

class a

void destroy()

private:

~a()

};int main()

設計乙個類,只能在堆上建立物件

設計乙個類 只能在堆上建立物件 思路 說明不能在棧上建立物件,考慮到棧上建立物件會發生哪些事 1 建構函式 2 拷貝構造 所以先遮蔽掉建構函式,即設為私有。存在問題 在堆上建立物件也會呼叫建構函式,設為私有對其有影響 解決 提供成員函式介面,在成員函式中建立堆物件。存在問題 成員函式需要物件來呼叫,...

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

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

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

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