有的時候為了保證乙個類的物件必須在堆上被建立, 比如當我們需要手動控制乙個物件的生命週期的時候, 這個時候就必須保證這個物件是在堆上建立的, 如何保證呢, 有個小的技巧:
就是將析構函式給private了.並且用另外個公共函式來呼叫析夠函式.
class a
private:
~a() ;
};int main()
原因是c++是乙個靜態繫結的語言. 在編譯過程中, 所有的非虛函式呼叫都必須分析完成. 即使是虛函式, 也需檢查可訪問性. 因些, 當在棧(stack)上生成物件時, 物件會自動析構, 也就說析構函式必須可以訪問. 而堆上生成物件, 由於析構時機由程式設計師控制, 所以不一定需要析構函式. 保證了不能在棧上生成物件後, 需要證明能在堆上生成它.
設計乙個類,只能在堆上建立物件
設計乙個類 只能在堆上建立物件 思路 說明不能在棧上建立物件,考慮到棧上建立物件會發生哪些事 1 建構函式 2 拷貝構造 所以先遮蔽掉建構函式,即設為私有。存在問題 在堆上建立物件也會呼叫建構函式,設為私有對其有影響 解決 提供成員函式介面,在成員函式中建立堆物件。存在問題 成員函式需要物件來呼叫,...
如何建立乙個只能在堆上產生物件的類
一 分析 1.定義乙個只能在堆上產生物件的類,自然聯想到new malloc calloc等動態分配記憶體的方法來產生物件。但在c 中,產生物件要呼叫建構函式,當然選擇new來解決。2.只能在堆上而不能在棧上建立物件,想到可以把建構函式定義成private或者protected 裡面,防止在類外的棧...
C 設計乙個類,只能在棧 堆 上建立物件
設計乙個類,只能在棧上建立物件 使用new運算子,物件會建立在堆上,也就是說只要不用new去建立物件就可以實現,我們知道new和delete分別呼叫了operator new和operator delete,如果我們把這兩個函式宣告為私有的,操作符new就不能用了。class a a private...