日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++中new的总结(动态管理,malloc存在的问题,malloc与new的区别)

發布時間:2023/11/30 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++中new的总结(动态管理,malloc存在的问题,malloc与new的区别) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

c中使用malloc出現的問題

  • 程序員必須確定對象的長度
  • malloc 返回一個(void *)指針 ,c++不允許將(void*) 賦值給其它指針,必須強轉
  • malloc可能申請內存失敗,所以必須判斷返回值來保存內存分配成功
  • 用戶在使用對象之前必須記住對他初始化,構造函數不能顯示調用初始化(構造函數是由編譯器調用的),用戶有可能忘記調用初始化函數
  • c的動態內存分配函數太復雜,容易令人混淆,是不可接受的,c++中我們推薦使用運算符new和delete

    new運算符和delete運算符

  • Person *p=new Person會返回一個Person

  • 默認調用析構函數,開辟空間,返回不是void*,不需要強制轉換

  • delete釋放

  • new對象用void *取接受,釋放不了對象

  • new出來的是數組,如何釋放 ? delete[]

  • new出來的是數組,肯定會調用默認構造

    #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會調用構造//new運算符,malloc是函數//釋放堆區域的空間//delete也是運算符,要配合new用,malloc配合free用delete p2;}void test02(){void *p = new Person;//當用void* 接受new出來的指針,會出現釋放的問題delete p;//無法釋放p}void test03(){//同過new來開辟數組//一定會調用默認構造函數,所以一定要提供默認構造Person *pArray = new Person[10];//Person pArray2[2] = { Person(1), Person(2) };//在棧上開辟數組,可以指定有參構造//釋放數組 delete[]必須加上中括號delete []pArray;}int main(){//test01();//test02();test03();system("pause");return 0;}
  • malloc/free和new/delete的區別

    malloc/free和new/delete的共同點是:都是從堆上申請空間,并且需要用戶手動釋放。不同的地方是:

  • malloc和free是函數,new和delete是操作符
  • malloc申請的空間不會初始化,new可以初始化
  • malloc申請空間時,需要手動計算空間大小并傳遞,new只需在其后跟上空間的類型即可
  • malloc的返回值為void*, 在使用時必須強轉,new不需要,因為new后跟的是空間的類型
  • malloc申請空間失敗時,返回的是NULL,因此使用時必須判空,new不需要,但是new需要捕獲異常
  • 申請自定義類型對象時,malloc/free只會開辟空間,不會調用構造函數與析構函數,而new在申請空間 后會調用構造函數完成對象的初始化,delete在釋放空間前會調用析構函數完成空間中資源的清理
  • new/delete比malloc和free的效率稍微低點,因為new/delete的底層封裝了malloc/free
  • 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的c++中new的总结(动态管理,malloc存在的问题,malloc与new的区别)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。