<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
int* p= new int(10);
這裡的new的用法是當作運運算元的用法,該用法一共有四個步驟:
new當作函數用法使用的是時候,類似malloc,都是申請一個空間,區別在於,返回值不同;當空間不足時malloc會返回一個“nullptr”,operator new會返回一個throw_bad的異常。
當我們加入一個nothrow後:
這樣申請錯誤後,我們返回的是空指標。
對於malloc我們不可以進行初始化,new也不可以初始化。
所以當new作為函數時就相當於malloc。
定位new用法與構造new十分相似,是在已經確定的空間當中,構造一個物件,並將該物件放置到宣告的空間當中。
int main() { int n = 10; int* ipa = (int*)ma11oc(sizeof(int)); int* ipb = (int*) : :operator new(sizeof(int) * n); new(ipa) int(20); new(ipb) int[]{ 1,2,3,4,5,6,7,8,9 }; free(ipa); : :operator delete(ipb); return 0; }
不需要開闢相應的空間 合法空間即可 給出某個地址 即可根據要求進行相應操作。
new建立物件特點:
new建立物件例子:
CTest* pTest = new CTest(); delete pTest;
pTest用來接收物件指標。
不用new,直接使用類定義申明:
CTest mTest;
此種建立方式,使用完後不需要手動釋放,該類解構函式會自動執行。
而new申請的物件,則只有呼叫到delete時再會執行解構函式,如果程式退出而沒有執行delete則會造成記憶體漏失。
C Test* pTest = NULL;
但使用普通方式建立的類物件,在建立之初就已經分配了記憶體空間。
這類指標,如果未經過物件初始化,則不需要delete釋放。
delete運運算元使用的一般格式為
delete [ ]指標變數
例如要復原上面用new開闢的空間用:
delete p;
如果我們用“new char[10];”開闢的字元陣列空間,把new返回的指標賦給了指標變數pt,則應該用以下形式的delete運運算元復原該空間:
delete [] pt;
一般來說delete與new需要配對使用。
動態分配失敗,則返回一個空指標(NULL),表示發生了異常,堆資源不足,分配失敗。
指標刪除與堆空間釋放。刪除一個指標p(delete p;)實際意思是刪除了p所指的目標(變數或物件等),釋放了它所佔的堆空間,而不是刪除p本身(指標p本身並沒有復原,它自己仍然存在,該指標所佔記憶體空間並未釋放),釋放堆空間後,p成了空指標。
記憶體漏失(memory leak)和重複釋放。new與delete 是配對使用的, delete只能釋放堆空間。如果new返回的指標值丟失,則所分配的堆空間無法回收,稱記憶體漏失,同一空間重複釋放也是危險的,因為該空間可能已另分配,所以必須妥善儲存new返回的指標,以保證不發生記憶體漏失,也必須保證不會重複釋放堆記憶體空間。
動態分配的變數或物件的生命期。我們也稱堆空間為自由空間(free store),但必須記住釋放該物件所佔堆空間,並只能釋放一次,在函數內建立,而在函數外釋放,往往會出錯。
要存取new所開闢的結構體空間,無法直接通過變數名進行,只能通過賦值的指標進行存取。
用new和delete可以動態開闢和復原地址空間。在程式設計序時,若用完一個變數(一般是暫時儲存的資料),下次需要再用,但卻又想省去重新初始化的功夫,可以在每次開始使用時開闢一個空間,在用完後復原它。
到此這篇關於C++深入講解new與deleted關鍵字的使用的文章就介紹到這了,更多相關C++ new與deleted內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45