C 學習筆記3 new

2021-06-22 02:05:33 字數 2384 閱讀 1118

c++學習過程中經常會碰到一些關於元素的插入與刪除。就容器而言,在容器物件中insert或者壓入乙個元素時,該物件大小會增加1。在分析容器與陣列區別的時候,網友提出了,陣列的大小是指定的,而容器的大小動態的。當時我也思考到,new和delete也是動態的建立陣列的,這又該怎麼解釋呢?於是我把教材中關於new和delete的內容再搬過來,再來看看,new什麼?delete什麼?new有什麼好處?

1:動態陣列中的那些事兒

枯燥的看下了解下陣列吧:陣列型別的變數有三個重要的限制:1)陣列長度固定不變;2)編譯時必須知道其長度;3)陣列在定義它的語句塊記憶體在

大致上明白了一點:就是長度我得知道,在哪部分定義的,就用在哪部分。

but:這樣的限制也太坑爹了吧,我編寫了個程式。然後用到了陣列,比如說高一的時候大家沒分科,都在一起學習,有40個人。到高二了涉及到分科了,這時候呢有些人去學文科了,有些人去學理科了。對這個班來說我要保留理科班的性質,學文科的可以離開,一些別的班的學理科的也可以進來。但是怎麼辦呢?我只有40個位置,這時候進來學理科的比出去學文科的人多。我不能不給他們分配位置啊。但是我只有40個位置啊?好吧,我們得想個辦法解決它。

這樣可不可以?我們先不管它有多少個人,反正最後我都讓它有位置坐,有41個人我給它41個位置,有50個我給它50個位置。反正我們安排(編譯)的時候不管他多少人,只有等我們上課(執行)的時候再確定他有多少人。這樣的人數我們會一直存在著(動態陣列一直存在),只有等到畢業的時候,才把這個班級拆掉。(直到程式顯示釋放為止)。

一樣的道理,跟陣列一樣,我們得定義它,還要初始化它。

最後分班的時候我們只要知道它是理科班還是文科班(型別)和這個班有多少人(長度)即可。

定義:int *pia = new int[40];//我們建立了乙個有40(長度)個人的理科班(型別),是由pia(指標)來當班主任。

但是我new了乙個班級,那我返回什麼呢?我得給我這個班有乙個標識吧。那就用學霸來標識吧,班主任一般都比較喜歡第一名,那就指向第一名吧。(陣列的第乙個元素)

初始化:怎麼初始化?一般的在c++的學習中都會涉及到類型別和內建型別。

因此在動態的陣列中初始化中,類型別就是用該類的預設建構函式初始化,如果是內建型別就不初始化。

當我們畢業時。。。。。。

你們班用了3年了,要畢業了,你畢業了不能還想把這個班級佔著吧,你得清空吧。那你就得釋放它。都想你這樣天天佔著乙個班,那學校早得炸了(記憶體逐漸耗盡)。

怎麼釋放呢?-------把你們班主任乾掉!!!!

操作:

delete  pia;    //班主任pia終於把你們帶畢業了,它也得把你們清空了。

2、我希望new乙個物件,然後不再delete她

文學家可以用很華麗的文本來表達對心愛之人的愛慕之情,但是碼農也可以浪漫。你可以再linux中寫乙個指令碼,然後編譯進核心。當她每一次開機的時候,你得情書就能華麗麗的在螢幕上跳動著她的華爾茲。但是尼瑪,這也得是女碼農才會用linux啊。好吧,在沒有物件之前,我們就只能先yy了,自己創造乙個物件(new)。

聯想到陣列的new,我們知道我想要乙個物件,這個物件首先是個女的(型別),沒了!恩!就是沒了!!! 屌絲在沒有女朋友之前,要求哪有那麼高,女的就行。

好吧,讓我們來定義吧。

girl *me = new girl ;

//乙個姑娘就有了,這個姑娘是女的,是me要的女的,就是乙個girl型別的,我所指向的女的。

返回的是什麼?返回的肯定是我這個指標啊,都說了是我指向的。

其實呢?我還是想 多知道點這個姑娘的一些資訊。比如名字?身高?那就給她賦點東西,雖然她可能會改名,也有可能會長高。但我猜她是不會變性的。

初始化:

girl *me = new girl (165);

//好吧,這個姑娘有165的身高。這是她現在的身高!!!

當然了你也可以不自個給她附一些東西,因為有些東西天然的會給她附加的(預設建構函式)

戀愛中的人是瘋狂的,突然有一天你發現再這麼折騰下去,你精力都要被耗盡了(耗盡記憶體)。你就想分手了。

那你就趕緊把她給刪了吧,**本裡也別留,什麼都別留。

delete me;

//我靠,不是刪除它嘛,幹嘛delete me啊?誰叫你跟人家糾纏呢?愛,最後一次有點關係吧。

總結一下:基本上我記錄的筆記都沒有討論const的情況,這種情況其實也是大同小異,把教材當個工具書,你編寫**的時候突然想用const了,就去查吧。這樣效率更高。

3:c++中有了malloc/free,為什麼還需要new/delete?

malloc/free是c++/c語言的標準庫函式,new/delete是c++運算子。它們都可用於申請動態記憶體和釋放記憶體。

對於非內部資料型別的物件而言,只用malloc/free無法滿足動態物件的要求。

C 學習筆記 C 中的new

在c語言中我們學習過動態記憶體分配一共有這麼幾個操作 malloc free realloc alloc 1.malloc最常見,申請指定大小的記憶體,如果成功則返回申請記憶體的首位址,如果失敗返回null。2.free操作釋放由malloc realloc和alloc申請的記憶體,其實就是釋放在堆...

C 學習筆記 3

最近在寫code時候,發現了關於static變數的一些使用需要注意的地方。具體的情況可以看下面的例子 aclass.h 宣告了aclass class aclass int data aclass.cpp 定義了乙個static的aclass例項 include aclass.h static ac...

c 學習筆記3

toolstrip工具欄的用法 toolstrip的設定 影象和選單用到的屬性 displaystyle屬性和textimagerelation屬性。displaystyle屬性設定工具欄上每乙個按鈕上顯示影象 顯示文字或者顯示影象和文字,預設是只顯示影象。textimagerelation屬性設定...