malloc 源码_【C++学习笔记(九)】之 new运算符的使用/ new 与 malloc的异同(附代码,详细注释)...
new 運(yùn)算符的使用
一. new的簡單介紹:
new運(yùn)算符用于在堆區(qū)開辟空間,所有new出來的對(duì)象,對(duì)返回該類對(duì)象的指針。
二. new 與 malloc 的異同點(diǎn):
1.malloc作用相同, malloc 也是在堆區(qū)開辟空間, 但返回的是 void* ,需要強(qiáng)制轉(zhuǎn)
2.malloc 不會(huì)調(diào)用構(gòu)造函數(shù), new 會(huì)調(diào)用構(gòu)造函數(shù)。
3.malloc 配合 free 釋放堆區(qū)空間 ,new 配合 delete釋放堆區(qū)空間。
三. new 構(gòu)造數(shù)組
通過 new 開辟數(shù)組一定會(huì)調(diào)用默認(rèn)構(gòu)造函數(shù),所以一定要提供默認(rèn)構(gòu)造函數(shù)
四. delete [] 釋放數(shù)組空間
單一對(duì)象與數(shù)組的內(nèi)存構(gòu)造是不同的,數(shù)組的內(nèi)存中還包括“數(shù)組大小記錄”,使得delele時(shí)知道應(yīng)該調(diào)用幾次析構(gòu)函數(shù)。當(dāng)我們使用delete時(shí),必須讓delete知道指針?biāo)赶虻膬?nèi)存空間是否存在一個(gè)“數(shù)組大小記錄”,因此,使用delete[]就能讓delete知道這是一個(gè)數(shù)組,從而清楚應(yīng)該調(diào)用幾次析構(gòu)函數(shù)。
注意:當(dāng)用 void* 接受 new 出來的指針,會(huì)出現(xiàn)內(nèi)存釋放的問題, 無法釋放內(nèi)存
五.代碼如下,有詳細(xì)注釋:
#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;class Person { public:Person(){cout << "默認(rèn)構(gòu)造函數(shù)調(diào)用" << endl;}Person(int a){cout << "有參構(gòu)造函數(shù)調(diào)用" << endl;}~Person(){cout << "析構(gòu)函數(shù)調(diào)用" << endl;} };void test01() {Person p1; //在棧區(qū)開辟空間Person* p2 = new Person; //在堆區(qū)開辟空間//所有new出來的對(duì)象,對(duì)返回該類型對(duì)象的指針// malloc 也是在堆區(qū)開辟空間, 但返回的是 void* ,需要強(qiáng)制轉(zhuǎn)換// malloc 不會(huì)調(diào)用構(gòu)造函數(shù), new 會(huì)調(diào)用構(gòu)造函數(shù)// malloc 配合 free 釋放堆區(qū)空間 new 配合 delete釋放堆區(qū)空間delete p2;}void test02() {void* p = new Person(10);//當(dāng)用 void* 接受 new 出來的指針,會(huì)出現(xiàn)內(nèi)存釋放的問題, 無法釋放內(nèi)存delete p; //雖然使用了delete,但是沒有調(diào)用析構(gòu)函數(shù),沒有釋放內(nèi)存 }void test03() {// 通過 new 開辟數(shù)組一定會(huì)調(diào)用默認(rèn)構(gòu)造函數(shù),所以一定要提供默認(rèn)構(gòu)造函數(shù)Person* pArray = new Person[10];//Person pArray2 ={Person(1), Person(2)}; 在棧上開辟數(shù)組空間,可以用有參構(gòu)造//釋放數(shù)組 delete[]delete[] pArray;}int main() {test03();return 0; }點(diǎn)進(jìn)來,關(guān)注我 CV小鴿 看更多CV,深度學(xué)習(xí),編程學(xué)習(xí)筆記,更有海量源碼等你來拿!!!
讓我們一起學(xué)習(xí),一起進(jìn)步!!!
OpenCV學(xué)習(xí)筆記?zhuanlan.zhihu.com機(jī)器學(xué)習(xí)筆記?zhuanlan.zhihu.comC++學(xué)習(xí)筆記?zhuanlan.zhihu.com深度學(xué)習(xí)筆記?zhuanlan.zhihu.com總結(jié)
以上是生活随笔為你收集整理的malloc 源码_【C++学习笔记(九)】之 new运算符的使用/ new 与 malloc的异同(附代码,详细注释)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: audio 上一首 下一首 自定义样式_
- 下一篇: android读取本地yaml文件_py