c++中new的总结(动态管理,malloc存在的问题,malloc与new的区别)
生活随笔
收集整理的這篇文章主要介紹了
c++中new的总结(动态管理,malloc存在的问题,malloc与new的区别)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
c中使用malloc出現(xiàn)的問(wèn)題
c的動(dòng)態(tài)內(nèi)存分配函數(shù)太復(fù)雜,容易令人混淆,是不可接受的,c++中我們推薦使用運(yùn)算符new和delete
new運(yùn)算符和delete運(yùn)算符
Person *p=new Person會(huì)返回一個(gè)Person
默認(rèn)調(diào)用析構(gòu)函數(shù),開(kāi)辟空間,返回不是void*,不需要強(qiáng)制轉(zhuǎn)換
delete釋放
new對(duì)象用void *取接受,釋放不了對(duì)象
new出來(lái)的是數(shù)組,如何釋放 ? delete[]
new出來(lái)的是數(shù)組,肯定會(huì)調(diào)用默認(rèn)構(gòu)造
#include<iostream>using namespace std;class Person{public:Person(){cout << "默認(rèn)構(gòu)造函數(shù)調(diào)用" << endl;}Person(int a){cout << "有參構(gòu)造調(diào)用" << endl;}~Person(){cout << "析構(gòu)函數(shù)調(diào)用" << endl;}};void test01(){//Person p1; //棧區(qū)開(kāi)辟Person *p2 = new Person;//堆區(qū)開(kāi)辟//所有new出來(lái)的對(duì)象,都會(huì)返回該類型的指針//malloc返回void*還要強(qiáng)轉(zhuǎn)//malloc會(huì)調(diào)用構(gòu)造嗎?不會(huì) new會(huì)調(diào)用構(gòu)造//new運(yùn)算符,malloc是函數(shù)//釋放堆區(qū)域的空間//delete也是運(yùn)算符,要配合new用,malloc配合free用delete p2;}void test02(){void *p = new Person;//當(dāng)用void* 接受new出來(lái)的指針,會(huì)出現(xiàn)釋放的問(wèn)題delete p;//無(wú)法釋放p}void test03(){//同過(guò)new來(lái)開(kāi)辟數(shù)組//一定會(huì)調(diào)用默認(rèn)構(gòu)造函數(shù),所以一定要提供默認(rèn)構(gòu)造Person *pArray = new Person[10];//Person pArray2[2] = { Person(1), Person(2) };//在棧上開(kāi)辟數(shù)組,可以指定有參構(gòu)造//釋放數(shù)組 delete[]必須加上中括號(hào)delete []pArray;}int main(){//test01();//test02();test03();system("pause");return 0;}malloc/free和new/delete的區(qū)別
malloc/free和new/delete的共同點(diǎn)是:都是從堆上申請(qǐng)空間,并且需要用戶手動(dòng)釋放。不同的地方是:
總結(jié)
以上是生活随笔為你收集整理的c++中new的总结(动态管理,malloc存在的问题,malloc与new的区别)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 残角子宫需要切除输卵管吗
- 下一篇: c++中静态成员变量和静态成员函数