欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++ 中的new 和 delete 運算符及new和malloc的區(qū)別解析

 更新時間:2024年11月14日 14:42:21   作者:wqyc++  
在C++中,又引出了一個新玩法:new 和 delete,在C++中,new是用來動態(tài)開辟內(nèi)存的,delete是用來釋放我們所動態(tài)開辟的內(nèi)存C++中的new和delete運算符及new和malloc的區(qū)別解析,感興趣的朋友跟隨小編一起看看吧

一、什么是new和delete

我們知道在C語言中,動態(tài)開辟內(nèi)存的方法是使用:malloc/calloc/realloc。釋放動態(tài)開辟的內(nèi)存是free。在C++中,又引出了一個新玩法:new 和 delete。在C++中,new是用來動態(tài)開辟內(nèi)存的,delete是用來釋放我們所動態(tài)開辟的內(nèi)存。

在C語言中,對內(nèi)置類型的動態(tài)開辟我們經(jīng)常使用的函數(shù)是malloc函數(shù)。在C++中,我們也可以使用new操作符來動態(tài)申請空間。注意:我們這里發(fā)現(xiàn)了malloc 和 new 的第一個區(qū)別,malloc是函數(shù),new是一個操作符。當然,成對出現(xiàn)的free 是函數(shù),delete 是操作符。我們先看其實用方法的對比,代碼如下:

void Test()
{
    // 動態(tài)申請一個int類型的空間
    int* p1 = malloc(sizeof(int));
    int* p2 = new int;
    // 動態(tài)申請一個int類型的空間并初始化為10
    int* p3 = malloc(sizeof(int));
    *p3 = 10;
    int* p4 = new int(10);
    // 動態(tài)申請10個int類型的空間
    int* p5 = malloc(sizeof(int) * 3);
    int* p6 = new int[3];
    //釋放
    free(p1);
    delete p2;
    free(p3);
    delete p4;
    free(p5);
    delete[] p6;
}

通過上面的使用對比,我們可以很明顯的感覺到new和delete使用起來更加方便。因為我們在使用new動態(tài)開辟空間時,并不需要計算所開辟空間類型的大小。因為后面跟著類型,new會自動計算出類型的大小。

我們還發(fā)現(xiàn),new在動態(tài)開辟內(nèi)存時,還可以對其進行初始化。而malloc開辟后,才可通過解引用對其進行初始化。new在動態(tài)開辟數(shù)組時,也可對其進行初始化,但是這只是C++11才開始支持的語法,用法如下:

    int* p6 = new int[10]{1,2,3};
    delete[] p6;
    //后面沒有給出的值,會自動初始化為0。

二、new和malloc的區(qū)別

new 和 malloc 的區(qū)別 :

1.malloc 是c語言庫函數(shù),new是運算符。
2.malloc 返回值必須強制類型轉(zhuǎn)換,new的返回值不需要。
3.malloc 必須傳入具體字節(jié)個數(shù),new傳入變量個數(shù)或者變量本身。 
4.malloc 申請失敗會返回空,new會拋出異常。
5.使用new創(chuàng)建一個類的對象時會先調(diào)用malloc分配空間,然后再調(diào)用構(gòu)造函數(shù)給成員變量賦值。   

6.在給自定義類申請空間時new和delete會自動調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)。

到此這篇關于C++ 中的new 和 delete 運算符及new和malloc的區(qū)別解析的文章就介紹到這了,更多相關c++ new 和 delete 運算符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++?TCP網(wǎng)絡編程詳細講解

    C++?TCP網(wǎng)絡編程詳細講解

    TCP/IP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,它會保證數(shù)據(jù)不丟包、不亂序。TCP全名是Transmission?Control?Protocol,它是位于網(wǎng)絡OSI模型中的第四層
    2022-09-09
  • 使用C語言實現(xiàn)模糊搜索功能

    使用C語言實現(xiàn)模糊搜索功能

    本文所提到的模糊搜索是指輸入不完整的關鍵詞即可查詢到對應的全部準確結(jié)果。下面小編通過實例代碼給大家分享使用C語言實現(xiàn)模糊搜索功能,感興趣的朋友一起看看吧
    2018-08-08
  • string,CString,char*之間的轉(zhuǎn)化

    string,CString,char*之間的轉(zhuǎn)化

    下面是MFC/C++/C中字符類型CString, int, string, char*之間的轉(zhuǎn)換的說明與舉例,經(jīng)常用的東西,相信對于用C/C++的朋友,還是比較有用的
    2013-03-03
  • C++中Boost的智能指針scoped_ptr

    C++中Boost的智能指針scoped_ptr

    這篇文章介紹了C++中Boost的智能指針scoped_ptr,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C++通過SQLiteSDK增刪改查的實現(xiàn)示例

    C++通過SQLiteSDK增刪改查的實現(xiàn)示例

    SQLite是一種輕量級的嵌入式數(shù)據(jù)庫,可以利用SQLiteSDK執(zhí)行數(shù)據(jù)庫的增刪改查操作,本文主要介紹了C++通過SQLiteSDK增刪改查,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • C++中引用和const關鍵字介紹

    C++中引用和const關鍵字介紹

    大家好,本篇文章主要講的是C++中引用和const關鍵字介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • 詳解c++中signal信號攜帶數(shù)據(jù)的接收與發(fā)送

    詳解c++中signal信號攜帶數(shù)據(jù)的接收與發(fā)送

    這篇文章主要為大家詳細介紹了c++中signal信號攜帶數(shù)據(jù)的接收與發(fā)送的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01
  • C++函數(shù)重載的深入解析

    C++函數(shù)重載的深入解析

    在C++中,我們也能夠把具有相同功能的函數(shù)整合到一個函數(shù)上,而不必去寫好多個函數(shù)名不同的函數(shù),這叫做函數(shù)的重載。以下是對C++中的函數(shù)重載進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-07-07
  • C++中兩種字符串定義方式和區(qū)別介紹

    C++中兩種字符串定義方式和區(qū)別介紹

    大家好,本篇文章主要講的是C++中兩種字符串定義方式和區(qū)別介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C++四種cast使用詳細介紹

    C++四種cast使用詳細介紹

    本文主要介紹了C++四種cast使用詳細介紹,今天我們要來講的是顯式類型轉(zhuǎn)換,C++提供了四種顯式類型轉(zhuǎn)換,分別是:static_cast、dynamic_cast、const_cast、reinterpret_cast,感興趣的可以了解一下
    2022-07-07

最新評論