第18章 特殊工具與技術 4

2021-06-03 00:35:57 字數 768 閱讀 1134

18.1.6 類特定的new和delete

編譯器看到類型別的new或delete表示式的時候,它檢視該類是否有operator new或operator delete成員,如果類定義(或繼承)了自己的成員new和delete函式,則使用那些函式為物件分配和釋放記憶體;否則,呼叫這些函式的標準庫版本。

1. 成員new和delete函式

如果類定義了這兩個成員中的乙個,它也應該定義另乙個。

類成員operator new函式必須具有返回型別void*並接受size_t型別的形參。由new表示式用以位元組計算的分配記憶體量初始化函式的size_t形參。

類成員operator delete函式必須具有返回型別void。它可以定義為接受單個void*型別形參,也可以定義為接受兩個形參,即void*和size_t型別。由delete表示式用被delete的指標初始化void*形參,該指標可以是空指標。如果提供了size_t形參,就用編譯器用第乙個形參所指物件的位元組大小自動初始化size_t形參。

這些函式隱式為靜態函式,不必顯式地將它們宣告為static,雖然這樣做是合法的。成員new和delete函式必須是靜態的,因為它們要麼在構造物件之前使用(operator new),要麼在撤銷物件之後使用(operator delete),因此,這些函式沒有成員可操縱。像任意其他靜態成員函式一樣,new和delete只能直接訪問所屬類的靜態成員。

2. 陣列操作符new和操作符delete

也可以定義成員operator new和operator delete來管理類型別的陣列。如果這些operator h

第18章 特殊工具與技術 5

18.2 執行時型別識別 通過執行時型別識別 rtti 程式能夠使用基類的指標或引用來檢索這些指標或引用所指物件的實際派生型別。通過下面兩個操作符提供rtti 1 typeid操作符,返回指標或引用所指物件的實際型別。2 dynamic cast操作符,將基類型別的指標或引用安全地轉換為派生型別的指...

第18章 特殊工具與技術 6

18.2 執行時型別識別 通過執行時型別識別 rtti 程式能夠使用基類的指標或引用來檢索這些指標或引用所指物件的實際派生型別。通過下面兩個操作符提供rtti 1 typeid操作符,返回指標或引用所指物件的實際型別。2 dynamic cast操作符,將基類型別的指標或引用安全地轉換為派生型別的指...

第18章 特殊工具與技術 1

18.1 優化記憶體分配 c 的記憶體分配是一種型別化操作 new為特定型別分配記憶體,並在新分配的記憶體中構造該型別的乙個物件。new表示式自動執行合適的建構函式來初始化每個動態分配的類型別。18.1.1 c 中的記憶體分配 c 中,記憶體分配和物件構造緊密糾纏,就像析構和記憶體 一樣。使用new...