malloc 源码_【C++学习笔记(九)】之 new运算符的使用/ new 与 malloc的异同(附代码,详细注释)...
生活随笔
收集整理的這篇文章主要介紹了
malloc 源码_【C++学习笔记(九)】之 new运算符的使用/ new 与 malloc的异同(附代码,详细注释)...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
new 運算符的使用
一. new的簡單介紹:
new運算符用于在堆區開辟空間,所有new出來的對象,對返回該類對象的指針。
二. new 與 malloc 的異同點:
1.malloc作用相同, malloc 也是在堆區開辟空間, 但返回的是 void* ,需要強制轉
2.malloc 不會調用構造函數, new 會調用構造函數。
3.malloc 配合 free 釋放堆區空間 ,new 配合 delete釋放堆區空間。
三. new 構造數組
通過 new 開辟數組一定會調用默認構造函數,所以一定要提供默認構造函數
四. delete [] 釋放數組空間
單一對象與數組的內存構造是不同的,數組的內存中還包括“數組大小記錄”,使得delele時知道應該調用幾次析構函數。當我們使用delete時,必須讓delete知道指針所指向的內存空間是否存在一個“數組大小記錄”,因此,使用delete[]就能讓delete知道這是一個數組,從而清楚應該調用幾次析構函數。
注意:當用 void* 接受 new 出來的指針,會出現內存釋放的問題, 無法釋放內存
五.代碼如下,有詳細注釋:
#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;class Person { public:Person(){cout << "默認構造函數調用" << endl;}Person(int a){cout << "有參構造函數調用" << endl;}~Person(){cout << "析構函數調用" << endl;} };void test01() {Person p1; //在棧區開辟空間Person* p2 = new Person; //在堆區開辟空間//所有new出來的對象,對返回該類型對象的指針// malloc 也是在堆區開辟空間, 但返回的是 void* ,需要強制轉換// malloc 不會調用構造函數, new 會調用構造函數// malloc 配合 free 釋放堆區空間 new 配合 delete釋放堆區空間delete p2;}void test02() {void* p = new Person(10);//當用 void* 接受 new 出來的指針,會出現內存釋放的問題, 無法釋放內存delete p; //雖然使用了delete,但是沒有調用析構函數,沒有釋放內存 }void test03() {// 通過 new 開辟數組一定會調用默認構造函數,所以一定要提供默認構造函數Person* pArray = new Person[10];//Person pArray2 ={Person(1), Person(2)}; 在棧上開辟數組空間,可以用有參構造//釋放數組 delete[]delete[] pArray;}int main() {test03();return 0; }點進來,關注我 CV小鴿 看更多CV,深度學習,編程學習筆記,更有海量源碼等你來拿!!!
讓我們一起學習,一起進步!!!
OpenCV學習筆記?zhuanlan.zhihu.com機器學習筆記?zhuanlan.zhihu.comC++學習筆記?zhuanlan.zhihu.com深度學習筆記?zhuanlan.zhihu.com總結
以上是生活随笔為你收集整理的malloc 源码_【C++学习笔记(九)】之 new运算符的使用/ new 与 malloc的异同(附代码,详细注释)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: audio 上一首 下一首 自定义样式_
- 下一篇: cvc 降噪_耳机降噪技术有哪几种?