new和delete運算子也可以像C ++中的其他運算子一樣多載,New和Delete運算子可以全域多載,也可以在特定類中多載,
(1)如果使用某個類的成員函式來多載這些運算子,則意味著這些運算子僅針對該特定類才被多載,
(2)如果多載是在類外部完成的(即它不是類的成員函式),則只要您使用這些運算子(在類內或類外),都將呼叫多載的“ new”和“ delete”,這是全域超載,
多載new運算子的語法:
void *運算子new(size_t size);
多載的new運算子接收的大小為size_t型別,該大小指定要分配的記憶體位元組數,多載的new的回傳型別必須為void *,多載的函式回傳一個指向分配的記憶體塊開頭的指標,
多載delete運算子的語法:
無效運算子delete(void *);
該函式接收一個必須洗掉的void *型別的引數,函式不應該回傳任何東西,
注意:默認情況下,多載的new和delete運算子函式都是靜態成員,因此,他們無權訪問此指標,
多載特定類的new和delete運算子
多載大小為16的新運算子建構式稱為名稱:Yash年齡:24多載洗掉運算子
注意:在上述新的多載函式中,我們已經通過new運算子分配了動態記憶體,但是它應該是global new運算子,否則它將以遞回形式
無效* p = new student(); //這將遞回,因為new將會一次又一次地被多載,
void * p = :: new student(); // 這是對的
new和delete運算子的全域多載
輸出:
新操作員多載 陣列:0 1 2 3 4 洗掉運算子多載
注意:在上面的代碼中,在新的多載函式中,我們無法使用:: new int [5]分配記憶體,因為它將以遞回方式進行,我們只需要使用malloc分配記憶體,
為什么要多載new和Delete?
(1)多載的new運算子函式可以接受引數;因此,一個類可以具有多個多載的新運算子功能,這使程式員在自定義物件的記憶體分配方面具有更大的靈活性,例如:
注意:代碼不僅將為單個字符分配記憶體,還將使用#字符初始化分配的記憶體,
(2)多載的new或delete運算子還為類的物件提供了垃圾回收,
(3)可以在多載的新運算子函式中添加例外處理例程,
(4)有時,您希望操作員是new并洗掉它們,以執行一些編譯器提供的版本不提供的自定義操作,例如,您可能會撰寫一個自定義運算子delete,以用0覆寫釋放的記憶體,以提高應用程式資料的安全性,
(5)我們可以在新函式中使用realloc()函式動態地重新分配記憶體,
(6)多載的新運算子還使程式員能夠從其程式中榨取一些額外的性能,例如,在一個類中,為了加快新節點的分配,維護了一個已洗掉節點的串列,以便在分配新節點時可以重新使用其記憶體,在這種情況下,多載的delete運算子會將節點添加到串列中洗掉的節點和多載的new運算子將從串列中分配記憶體,而不是從堆中分配記憶體以加速記憶體分配,當洗掉的節點串列為空時,可以使用堆中的記憶體,
另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!
C語言C++編程學習交流圈子,QQ群1095293493【點擊進入】微信公眾號:C語言編程學習基地
分享(原始碼、專案實戰視頻、專案筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習書籍分享:

編程學習視頻分享:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/194383.html
標籤:C++
