<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在某些情況下,程式只有在執行期間才能確定所需記憶體大小,此時應該使用new申請記憶體。申請成功的情況下會返回首地址,通過指向首地址的指標可以存取申請的記憶體,使用new申請記憶體的的語法如下:
new 資料型別(初始化參數列);
下面的例子定義了Duck型別的指標,並通過new申請記憶體,返回的地址賦值給指標,如下:
/// 1、定義目標型別的指標 Duck *pointerDuck; /// 2、使用new申請記憶體 pointerDuck = new Duck(666); /// 3、使用指標呼叫物件public成員 printf("%d n", pointerDuck->getAge());
需要注意的是:new返回的是地址,所以需要預先定義目標型別的指標
通過new申請的記憶體必須通過delete才能釋放,如果不釋放就會導致“記憶體漏失”,使用delete釋放記憶體的語法如下:
delete 指標名; /// 範例如下: delete pointerDuck;
此外,delete
語句執行時會呼叫物件的解構函式(對於自定義型別),同一記憶體空間只能被delete一次,如果記憶體空間被重複delete則會導致程式執行錯誤。
按照物件是否具有建構函式,new申請記憶體時根據型別是否有建構函式分為下面兩種情況:
new
會執行相應的建構函式;下面是沒有建構函式的基本資料型別使用new的例子:
/// 型別名後無括號則隨機值 pointer = new int[3]; /// 型別名後有括號則使用0初始化 pointer = new int[3]();
對於陣列,使用new動態申請記憶體空間的語法如下:
new 資料型別[陣列長度]; /// 如下 pointer = new int[3]();
使用delete釋放記憶體的語法如下:
delete[] 指標名; /// 如下 delete[] pointer;
使用new
申請陣列,返回的地址作為指標的值。使用指標存取陣列存在越界的可能性,而且不便於陣列功能的擴充套件。下面通過自定義類,來實現陣列的元素的賦值和存取等功能擴充套件,同時解決陣列存在的存取越界的問題,以及封裝陣列空間的申請和釋放。下面分步驟分析整型陣列的程式碼編寫過程:
arraySize
和陣列指標pointerInt需要宣告為私有資料成員;delete
釋放pointerInt
申請的空間;下面是具體實現的程式碼;
class ArrayOfInt { public: /// 建構函式中使用new申請陣列空間 ArrayOfInt(int size) :arraySize(size){ pointerInt = new int[arraySize](); } /// 解構函式完成陣列記憶體釋放 ~ArrayOfInt() { delete pointerInt; }; /// set函數進行元素值的設定,並進行越界檢查 void setElement(int index, int value) { assert(index >= 0 && index < arraySize); *(pointerInt + index)=value; } /// get函數進行越界檢查並返回指定位置的元素值 int getElement(int index) { assert(index >= 0 && index < arraySize); return *(pointerInt + index); } private: /// 私有資料成員負責記錄陣列長度和首地址 int *pointerInt; int arraySize; };
下面是使用這個陣列的例子:
ArrayOfInt arrayOfInt(3); arrayOfInt.setElement(1, 666); printf("%d n", arrayOfInt.getElement(1));
首先必須明確,基本型別的指標是不能用於二維或者更高維的陣列的,下面定義的指標只能存取一維陣列:
int *pointer;
為了存取n維陣列,必須定義n-1維的指標陣列:
int (*pointer)[2][3]; /// 第一維的[4]不是指標的維度 pointer = new int[4][2][3]();
到此這篇關於C++使用new和delete進行動態記憶體分配與陣列封裝的文章就介紹到這了,更多相關C++動態記憶體分配內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45