一、分析:
1.定義乙個只能在堆上產生物件的類,自然聯想到new、malloc、calloc等動態分配記憶體的方法來產生物件。但在c++中,產生物件要呼叫建構函式,當然選擇new來解決。
2.只能在堆上而不能在棧上建立物件,想到可以把建構函式定義成private或者protected 裡面,防止在類外的棧空間上呼叫建構函式來建立物件,生命週期結束時呼叫析構函式,故把析構函式也設定為private或protected。
3.可以定義乙個成員函式來產生new出物件通過返回值的方式傳遞出來。
二、實現
#include
using
namespace
std;
class objinheap
protected:
objinheap(int aa)
:_aa(aa)
{}~objinheap()
};int main()
三、注意:
1.把成員函式設定為static,就能不需要物件能呼叫成員函式。
2.在析構函式處delete 掉new出來的物件避免記憶體洩漏
設計乙個類,只能在堆上建立物件
設計乙個類 只能在堆上建立物件 思路 說明不能在棧上建立物件,考慮到棧上建立物件會發生哪些事 1 建構函式 2 拷貝構造 所以先遮蔽掉建構函式,即設為私有。存在問題 在堆上建立物件也會呼叫建構函式,設為私有對其有影響 解決 提供成員函式介面,在成員函式中建立堆物件。存在問題 成員函式需要物件來呼叫,...
C 設計乙個類,只能在棧 堆 上建立物件
設計乙個類,只能在棧上建立物件 使用new運算子,物件會建立在堆上,也就是說只要不用new去建立物件就可以實現,我們知道new和delete分別呼叫了operator new和operator delete,如果我們把這兩個函式宣告為私有的,操作符new就不能用了。class a a private...
保證只能在堆上new乙個類物件
有的時候為了保證乙個類的物件必須在堆上被建立,比如當我們需要手動控制乙個物件的生命週期的時候,這個時候就必須保證這個物件是在堆上建立的,如何保證呢,有個小的技巧 就是將析構函式給private了.並且用另外個公共函式來呼叫析夠函式.class a private a int main 原因是c 是乙...