new和delete

和 sizeof 類似,sizeof不是函數,它是一個操作符,它在編譯期就完成了計算,在函數運行期間它已經是一個常數值了。

int a;
sizeof(int) = 4;
sizeof(a) = 4;
sizeof a ——也是4 ?不需要括號!
?
此時要注意:
sizeof int——錯誤!此時int ?把sizeof當成int的修飾詞;比如 ?signed int , ?register int 。。。

new 和 delete 也不是函數,它們都是 C++ 定義的關鍵字,通過特定的語法可以組成表達式。和 sizeof 不同的是,sizeof 在編譯時候就可以確定其返回值,new 和 delete 背后的機制則比較復雜。

?

string *ps = new string("hello world"); 

你就可以看出 new 和 malloc 還是有點不同的,malloc 申請完空間之后不會對內存進行必要的初始化,而 new 可以。

?

operator new 和 operator delete

這兩個其實是 C++ 語言標準庫的庫函數,原型分別如下:

void *operator new(size_t); //allocate an object void *operator delete(void *); //free an object void *operator new[](size_t); //allocate an array void *operator delete[](void *); //free an array 

后面兩個你可以先不看,后面再介紹。前面兩個均是 C++ 標準庫函數,你可能會覺得這是函數嗎?請不要懷疑,這就是函數!C++ Primer?一書上說這不是重載 new 和 delete 表達式(如?operator=?就是重載?=?操作符),因為 new 和 delete 是不允許重載的。但我還沒搞清楚為什么要用 operator new 和 operator delete 來命名,比較費解。我們只要知道它們的意思就可以了,這兩個函數和 C 語言中的 malloc 和 free 函數有點像了,都是用來申請和釋放內存的,并且 operator new 申請內存之后不對內存進行初始化,直接返回申請內存的指針。

?

如何申請和釋放一個數組?

string *psa = new string[10]; //array of 10 empty strings int *pia = new int[10]; 
上面在申請一個數組時都用到了?new []?這個表達式來完成,按照我們上面講到的 new 和 delete 知識,第一個數組是 string 類型,分配了保存對象的內存空間之后,將調用 string 類型的默認構造函數依次初始化數組中每個元素;第二個是申請具有內置類型的數組,分配了存儲 10 個 int 對象的內存空間,但并沒有初始化。
delete [] psa;
delete [] pia;
都用到?delete []?表達式,注意這地方的 [] 一般情況下不能漏掉!我們也可以想象這兩個語句分別干了什么:第一個對 10 個 string 對象分別調用析構函數,然后再釋放掉為對象分配的所有內存空間;第二個因為是內置類型不存在析構函數,直接釋放為 10 個 int 型分配的所有內存空間。

轉載于:https://www.cnblogs.com/fanhaha/p/7117934.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254153.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254153.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254153.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

char a[]和char *a的比較,數組名,數組首地址,a,a,a[0]

char a[]和char *a的比較 指針和數組存在著一些本質的區別。當然,在某種情況下,比如數組作為函數的參數進行傳遞時,由于該數組自動退化為同類型的指針,所以在函數內部,作為函數參數傳遞進來的指針與數組確實具有一定的…

Java中繼承thread類與實現Runnable接口的區別

Java中線程的創建有兩種方式: 1. 通過繼承Thread類,重寫Thread的run()方法,將線程運行的邏輯放在其中 2. 通過實現Runnable接口,實例化Thread類 在實際應用中,我們經常用到多線程,…

【VMware vSAN 6.6】6.2.啟用性能服務:vSAN硬件服務器解決方案

目錄 1. 簡介 1.1.適用于HCI的企業級存儲2. 體系結構 2.1.帶有本地存儲的服務器2.2.存儲控制器虛擬系統套裝的缺點2.3.vSAN在vSphere Hypervisor中自帶2.4.集群類型2.5.硬件部署選項3. 啟用vSAN 3.1.啟用vSAN3.2.輕松安裝3.3.主動測試4. 可用性 4.1.對象和組件安置4.2.重新構建…

Android eclipse導入項目后出現Unable to resolve target #39;android-17#39;解決方法

eclipse導入項目后出現Unable to resolve target android-17解決方法。在最后附帶還有一種編譯邏輯不成功情況解決方法。 一、問題情況 二、解決的方法 1、改動項目的目標版本號與當前Android sdk相相應的版本號 2、自己主動修復一下項目 三、這個問題不是上面的。是另外情況&a…

多個圓點,鼠標選取兩個,求兩個點的距離,用于計算像素尺寸(halcon實現)

read_image (Image, C:/Users/22967/Desktop/晶圓找位置/0.bmp) dev_close_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image)binary_threshold (Image, Region1, max_separability, dark, UsedThreshold) connection (Region1, C…

修改UBOOT和LINUX調試串口(TI達芬奇芯片--DM6467)

Posted on 2011-10-31 10:53 jamiedu 閱讀(889) 評論(0) 編輯 收藏 1.1 概述 TI針對DM6467提供的UBOOT和內核默認都是串口0作為調試串口輸出的,但現在我需要使用DM6467的UART0的modem功能,所以修改代碼,改變調試串口為串口2。 需要修改的主要…

Java List與數組之間的轉換

http://blog.csdn.net/kingzone_2008/article/details/8444678轉載于:https://www.cnblogs.com/longshiyVip/p/5985981.html

受歡迎的五個開源可視化工具——你的選擇是?

摘要:大數據時代,數據為王,還在對一堆數據而發愁嗎?試試可視化工具吧,相信本文提到的五款工具有一款能夠幫助到你。人工智能時代,數據和算法以及硬件資源是非常重要的,相關行業的大公司也越來越…

halcon車刀崩邊檢測

list_files (新建文件夾, files, Files) read_image (Image, Files[0]) dev_close_window () get_image_size (Image, Width, Height) dev_open_window (0, 0, Width/1.5, Height/1.5, black, WindowHandle) dev_set_draw (margin) dev_set_colored (12) for Index:0 to |Files…

FFMPEG解碼264文件步驟

本文以H264視頻流為例,講解解碼流數據的步驟。 為突出重點,本文只專注于討論解碼視頻流數據,不涉及其它(如開發環境的配置等)。如果您需要這方面的信息,請和我聯系。 準備變量 定義AVCodecContext。如果…

Storm概念學習系列之storm的特性

不多說,直接上干貨! storm的特性 Storm 是一個開源的分布式實時計算系統,可以簡單、可靠地處理大量的數據流。 Storm支持水平擴展,具有高容錯性,保證每個消息都會得到處理,而且處理速度很快(在一…

Confluence 6 配置服務器基礎地址示例

2019獨角獸企業重金招聘Python工程師標準>>> 如果 Confluence 的安裝是沒有安裝在非根目錄路徑(這個是上下文路徑),然后服務器基礎 URL 地址應該包括上下文地址。例如,你的 Confluence 正在運行在下面的地址&#xff1…

BootstrapValidator驗證

bootstrap:能夠增加兼容性的強大框架. 因為項目需要數據驗證,看bootstrapValidator 還不錯,就上手一直,完美兼容,話不多說。 需要引用css: bootstrap.min.css bootstrapValidator.min.css js: jquery-1.10.…

基于ARM9的視頻采集傳輸系統

http://www.ic37.com/htm_tech/2007-11/77189_618093.htm

halcon找矩形頂點的一種方法

主程序: read_image (Image11, 11)*畫仿射矩形 dev_set_color (green) draw_rectangle2 (3600, Row, Column, Phi, Length1, Length2)*生成仿射矩形xld gen_rectangle2_contour_xld (Rectangle, Row, Column, Phi, Length1, Length2) *找頂點工具(基于卡…

老男孩linux運維50期

一、自我介紹:我是來自老男孩Linux運維脫產50期的楊國峰,我以前是學軟件編碼的,但在大學里基本沒怎么學,每一門課都一知半解的,甚至有些連軟件都不會裝,在校期間,我對JAVA、網頁設計等都不感興趣…

博客收藏

http://www.dreamfairy.cn/blog/category/unity3d/轉載于:https://www.cnblogs.com/wantnon/p/5989843.html

移動開發平臺性能比較

jquerymobile是一個mobile平臺下的js框架,跟phonegap沒有一毛錢關系.phonegap實際上在國內占有率不高的,非常多人為了體驗喜歡做傳統的原生手機應用. 而Webapp如今的占有率越來越少,由于越來越多的人不喜歡用手機瀏覽器去體驗專門為移動平臺搭建的站點.我認為你的比較對象應該是…

H264關于RTP協議的實現

完整的C/S架構的基于RTP/RTCP的H.264視頻傳輸方案。此方案中,在服務器端和客戶端分別進行了功能模塊設計。服務器端:RTP封裝模塊主要是對H.264碼流進行打包封裝;RTCP分析模塊負責產牛和發送RTCP…

華為數通HCIE面試題目解密系列之RSTP邊緣端口

以下是華為數通面試考試的一道真題,原題如下; 請舉例說明 stp 的 edge port 的作用,用在什么場景,并且使用 edge port 會碰到什么問題,怎么解決和防止? 提到邊緣端口,我們是在NP課程的交換部分第一次接觸&a…