最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++使用new和delete進(jìn)行動(dòng)態(tài)內(nèi)存分配與數(shù)組封裝

 更新時(shí)間:2022年03月10日 14:26:44   作者:機(jī)器學(xué)習(xí)入坑者  
這篇文章主要介紹了C++使用new和delete進(jìn)行動(dòng)態(tài)內(nèi)存分配與數(shù)組封裝,運(yùn)行期間才能確定所需內(nèi)存大小,此時(shí)應(yīng)該使用new申請(qǐng)內(nèi)存,下面我們就進(jìn)入文章學(xué)習(xí)具體的操作方法,需要的小伙伴可以參考一下

1、使用new申請(qǐng)內(nèi)存

在某些情況下,程序只有在運(yùn)行期間才能確定所需內(nèi)存大小,此時(shí)應(yīng)該使用new申請(qǐng)內(nèi)存。申請(qǐng)成功的情況下會(huì)返回首地址,通過(guò)指向首地址的指針可以訪問(wèn)申請(qǐng)的內(nèi)存,使用new申請(qǐng)內(nèi)存的的語(yǔ)法如下:

new 數(shù)據(jù)類型(初始化參數(shù)列表);

下面的例子定義了Duck類型的指針,并通過(guò)new申請(qǐng)內(nèi)存,返回的地址賦值給指針,如下:

/// 1、定義目標(biāo)類型的指針
Duck *pointerDuck;
/// 2、使用new申請(qǐng)內(nèi)存
pointerDuck = new Duck(666);
/// 3、使用指針調(diào)用對(duì)象public成員
printf("%d \n", pointerDuck->getAge());

需要注意的是:new返回的是地址,所以需要預(yù)先定義目標(biāo)類型的指針

2、使用delete釋放內(nèi)存

通過(guò)new申請(qǐng)的內(nèi)存必須通過(guò)delete才能釋放,如果不釋放就會(huì)導(dǎo)致“內(nèi)存泄漏”,使用delete釋放內(nèi)存的語(yǔ)法如下:

delete 指針名;
/// 實(shí)例如下:
delete pointerDuck;

此外,delete語(yǔ)句執(zhí)行時(shí)會(huì)調(diào)用對(duì)象的析構(gòu)函數(shù)(對(duì)于自定義類型),同一內(nèi)存空間只能被delete一次,如果內(nèi)存空間被重復(fù)delete則會(huì)導(dǎo)致程序運(yùn)行錯(cuò)誤。

3、使用new申請(qǐng)內(nèi)存時(shí)的初始值

按照對(duì)象是否具有構(gòu)造函數(shù),new申請(qǐng)內(nèi)存時(shí)根據(jù)類型是否有構(gòu)造函數(shù)分為下面兩種情況:

  • 對(duì)于有構(gòu)造函數(shù)的對(duì)象,new會(huì)執(zhí)行相應(yīng)的構(gòu)造函數(shù);
  • 對(duì)沒(méi)有構(gòu)造函數(shù)的基本數(shù)據(jù)類型,如果在類型名后加()則使用0進(jìn)行初始化,但是不能使用具體值進(jìn)行初始化,類型名后不加()則不進(jìn)行初始化而是隨機(jī)值;

下面是沒(méi)有構(gòu)造函數(shù)的基本數(shù)據(jù)類型使用new的例子:

/// 類型名后無(wú)括號(hào)則隨機(jī)值?
pointer = new int[3];
/// 類型名后有括號(hào)則使用0初始化
pointer = new int[3]();

4、使用new和delete申請(qǐng)和釋放數(shù)組空間

對(duì)于數(shù)組,使用new動(dòng)態(tài)申請(qǐng)內(nèi)存空間的語(yǔ)法如下:

new 數(shù)據(jù)類型[數(shù)組長(zhǎng)度];
/// 如下
pointer = new int[3]();

使用delete釋放內(nèi)存的語(yǔ)法如下:

delete[] 指針名;
/// 如下
delete[] pointer;

5、用類封裝new申請(qǐng)和釋放的數(shù)組空間

使用new申請(qǐng)數(shù)組,返回的地址作為指針的值。使用指針訪問(wèn)數(shù)組存在越界的可能性,而且不便于數(shù)組功能的擴(kuò)展。下面通過(guò)自定義類,來(lái)實(shí)現(xiàn)數(shù)組的元素的賦值和訪問(wèn)等功能擴(kuò)展,同時(shí)解決數(shù)組存在的訪問(wèn)越界的問(wèn)題,以及封裝數(shù)組空間的申請(qǐng)和釋放。下面分步驟分析整型數(shù)組的代碼編寫(xiě)過(guò)程:

  • (1)確定私有數(shù)據(jù)成員:數(shù)組大小arraySize和數(shù)組指針pointerInt需要聲明為私有數(shù)據(jù)成員;
  • (2)確定構(gòu)造函數(shù):構(gòu)造函數(shù)需要通過(guò)數(shù)組大小arraySize,使用new申請(qǐng)對(duì)應(yīng)長(zhǎng)度的數(shù)組內(nèi)存空間,并將返回的地址賦值給指針pointerInt;
  • (3)確定析構(gòu)函數(shù):析構(gòu)函數(shù)需要通過(guò)delete釋放pointerInt申請(qǐng)的空間;
  • (4)確定get和set函數(shù):get和set函數(shù)需要進(jìn)行“越界檢查”,并完成取元素和設(shè)置元素值的功能;

下面是具體實(shí)現(xiàn)的代碼;

class ArrayOfInt {
public:
? ? /// 構(gòu)造函數(shù)中使用new申請(qǐng)數(shù)組空間
?? ?ArrayOfInt(int size) :arraySize(size){
?? ??? ?pointerInt = new int[arraySize]();
?? ?}
? ? /// 析構(gòu)函數(shù)完成數(shù)組內(nèi)存釋放
?? ?~ArrayOfInt() { delete pointerInt; };
? ??
? ? /// set函數(shù)進(jìn)行元素值的設(shè)置,并進(jìn)行越界檢查
?? ?void setElement(int index, int value) {
?? ??? ?assert(index >= 0 && index < arraySize);
?? ??? ?*(pointerInt + index)=value;
?? ?}
? ? /// get函數(shù)進(jìn)行越界檢查并返回指定位置的元素值
?? ?int getElement(int index) {
?? ??? ?assert(index >= 0 && index < arraySize);
?? ??? ?return *(pointerInt + index);
?? ?}

private:
? ? /// 私有數(shù)據(jù)成員負(fù)責(zé)記錄數(shù)組長(zhǎng)度和首地址
?? ?int *pointerInt;
?? ?int arraySize;
};

下面是使用這個(gè)數(shù)組的例子:

ArrayOfInt arrayOfInt(3);
arrayOfInt.setElement(1, 666);
printf("%d \n", arrayOfInt.getElement(1));

6、使用new申請(qǐng)多維數(shù)組

首先必須明確,基本類型的指針是不能用于二維或者更高維的數(shù)組的,下面定義的指針只能訪問(wèn)一維數(shù)組:

int *pointer;

為了訪問(wèn)n維數(shù)組,必須定義n-1維的指針數(shù)組:

int (*pointer)[2][3];
/// 第一維的[4]不是指針的維度
pointer = new int[4][2][3]();

到此這篇關(guān)于C++使用new和delete進(jìn)行動(dòng)態(tài)內(nèi)存分配與數(shù)組封裝的文章就介紹到這了,更多相關(guān)C++動(dòng)態(tài)內(nèi)存分配內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++圖書(shū)管理系統(tǒng)程序源代碼

    C++圖書(shū)管理系統(tǒng)程序源代碼

    這篇文章主要為大家詳細(xì)介紹了C++圖書(shū)管理系統(tǒng)程序源代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C/C++中四種常用查找算法的實(shí)現(xiàn)

    C/C++中四種常用查找算法的實(shí)現(xiàn)

    C語(yǔ)言作為一種強(qiáng)大的編程語(yǔ)言,提供了多種搜索算法的實(shí)現(xiàn)方式,本文將介紹C語(yǔ)言中的四種常見(jiàn)搜索算法并提供每種算法的簡(jiǎn)單實(shí)現(xiàn)示例,需要的小伙伴可以參考下
    2023-11-11
  • C/C++之long int與long long的區(qū)別及說(shuō)明

    C/C++之long int與long long的區(qū)別及說(shuō)明

    這篇文章主要介紹了C/C++之long int與long long的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易學(xué)生管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++中rapidjson組裝map和數(shù)組array的代碼示例

    C++中rapidjson組裝map和數(shù)組array的代碼示例

    今天小編就為大家分享一篇關(guān)于C++中rapidjson組裝map和數(shù)組array的代碼示例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • C++實(shí)現(xiàn)Window環(huán)境聊天室功能

    C++實(shí)現(xiàn)Window環(huán)境聊天室功能

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)Window環(huán)境聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++ OpenCV實(shí)戰(zhàn)之形狀識(shí)別

    C++ OpenCV實(shí)戰(zhàn)之形狀識(shí)別

    本案例通過(guò)使用OpenCV中的approxPolyDP進(jìn)行多邊形近似,進(jìn)而進(jìn)行基礎(chǔ)形狀識(shí)別(圓、三角形、矩形、星形…),快跟隨小編一起動(dòng)手嘗試一下
    2022-07-07
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單掃雷游戲

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C語(yǔ)言實(shí)現(xiàn)用戶態(tài)線程庫(kù)案例

    C語(yǔ)言實(shí)現(xiàn)用戶態(tài)線程庫(kù)案例

    下面小編就為大家?guī)?lái)一篇C語(yǔ)言實(shí)現(xiàn)用戶態(tài)線程庫(kù)案例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • MFC LoadImage用法案例詳解

    MFC LoadImage用法案例詳解

    這篇文章主要介紹了MFC LoadImage用法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評(píng)論

南溪县| 永城市| 株洲市| 江陵县| 南皮县| 谢通门县| 天柱县| 包头市| 许昌县| 鄂伦春自治旗| 安乡县| 泾川县| 稷山县| 嘉义县| 乌审旗| 凉城县| 赤城县| 东乡族自治县| 监利县| 福州市| 衢州市| 富锦市| 含山县| 新和县| 安龙县| 阿城市| 迁西县| 永顺县| 宽甸| 谢通门县| 南汇区| 资阳市| 垣曲县| 尤溪县| 泽库县| 苏尼特左旗| 井冈山市| 时尚| 西乌珠穆沁旗| 西乌| 新民市|