21.C 语言与 C++在内存分配有什么区别?
C 語言與 C++在內(nèi)存分配有什么區(qū)別?
在C語言中通過malloc和free來分配、釋放內(nèi)存空間;在C++語言中通過new和delete來分配和釋放內(nèi)存空間。
malloc/free和new/delete的主要區(qū)別:
1)malloc/free是庫函數(shù),new/delete是操作符。
2)malloc是從堆上開辟空間,而new是從自由存儲區(qū)開辟;(自由存儲區(qū)是 C++抽象出來的概念,不僅可以是堆,還可以是靜態(tài)存儲區(qū))。
3)new?初始化對象,調(diào)用對象的構(gòu)造函數(shù),對應(yīng)的delete調(diào)用相應(yīng)的析構(gòu)函數(shù)?;malloc 僅僅分配內(nèi)存,free僅僅回收內(nèi)存。
4)返回值問題,malloc開辟成功返回void*,需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,失敗返回NULL;new成功返回對象指針,失敗拋出異常。
5)使用free之前要判斷,要free的指針是!NULL的,使用delete則無須判斷。
free()釋放的是指針指向的內(nèi)存!注意!釋放的是內(nèi)存,不是指針!這點非常非常重要!指針是一個變量,只有程序結(jié)束時才被銷毀。釋放了內(nèi)存空間后,原來指向這塊空間的指針還是存在!只不過現(xiàn)在指針指向的內(nèi)容的垃圾,是未定義的,所以說是垃圾。因此,前面我已經(jīng)說過了,釋放內(nèi)存后把指針指向NULL,防止指針在后面不小心又被解引用了。非常重要啊這一點!
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的21.C 语言与 C++在内存分配有什么区别?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20. A *p=NULL,p 可以调用
- 下一篇: s3c2440移植MQTT