c++:為什麼要使用動態記憶體分配
例項化一個類有兩種方式:
// 假設有一個類A
// 方式一:直接定義法
A a;
// 方式二:動態記憶體分配法
A * a = new A();
兩者有什麼差別呢?
實際上,方式二即等價於如下程式碼:
A * a = new A();
等價於
A * a;
a = new A();
方式一就是直接將a放入棧區(區域性變數,大小受限,自動釋放);
方式二則是在堆區(動態記憶體,大小任意,手動釋放)分配一塊記憶體,然後用指標a去指向這塊記憶體;
那麼我們很容易就知道為什麼要使用動態記憶體分配來例項化一個類。
原因:
1.可以動態的申請空間,以便動態確定物件所需要的記憶體; 2.便於儲存大型物件,通常情況下棧區的大小容不下過於龐大的物件; 3.傳遞指標比傳遞整個物件更方便高效;
舉幾個生動形象的例子解釋以上三條原因:
1. 每個人都要吃鹽,鹽不夠了再去買顯然比把這輩子要吃的鹽一次性買下來要明智;
2. 如果你是賣鹽的,儲存了很多鹽,你只需要建一個倉庫把鹽放進去,然後自己記住倉庫地址即可,而不需要把鹽全部放在自己的家中;
3. 如果要去很遠的地方談賣鹽的生意,只需要選一些有代表性的資訊(地址)給對方就可以了,不需要把整個倉庫搬過去給對方看。
相關推薦
C++ 模板類動態記憶體分配
總時間限制: 1000ms 記憶體限制: 65536kB // 在此處補充你的程式碼 描述 程式填空,輸出指定結果 #include <iostream> #include <string> #includ
5.2-day02-C++/內聯/動態記憶體分配/引用/顯示型別轉換
九、 3.內聯 1)編譯器用函式的二進位制程式碼替換函式呼叫語句,減少函式呼叫的時間開銷。這種優化策略成為內聯。 2)頻繁呼叫的簡單函式適合內聯,而稀少呼叫的複雜函式不適合內聯。 3)遞迴函式無法內聯。 4)通過inline關鍵字,可以建議
【C語言】動態記憶體分配小結
為什麼存在動態記憶體分配? 我們已經掌握的記憶體開闢方式有: int val = 20;//在棧空間上開闢四個位元組 char arr[10];//在棧空間上開闢10個位元組的連續空間 但是上面開闢空間的方式有兩個特點: 1.空間開闢的大小是固定的 2.陣列在申明的時
【C語言】動態記憶體分配(malloc,realloc,calloc,free)的基本理解和區別
#include<Windows.h> #include<stdio.h> #include<malloc.h> int main() { int* p = NULL; printf("%x\n", p); p = (int*)malloc(sizeof(int)*
C語言之動態記憶體分配與釋放
一,堆記憶體 1,堆記憶體特點 堆記憶體可以存放任意型別的資料,但需要自己申請與釋放。 2,堆大小 堆大小,想像中的無窮大,但實際使用中,受限於實際記憶體的大小和記憶體是否有連續性。 二,堆記憶體的申請與釋放 1,malloc函式
c++類和動態記憶體分配
動態記憶體和類 特殊成員函式 1預設建構函式,如果你沒有定義建構函式 2預設的解構函式,如果你沒有定義解構函式 3複製建構函式,如果你沒有定義 4賦值運算子,如果你沒有定義 5地址運算子,如果你妹你沒有定義 1,2我們已經說說了,現在我們來說說後面的 何時呼叫複製建構函式
關於C++中的動態記憶體分配
1.malloc()、realloc()、free()函式 這三個函式為c++標準庫中的函式,都在#include <stdlib.h>中。(1)void *malloc()的返回型別為空指標 void *,因為我們並不知道指標指向什麼型別的資料,所以用voi
c++學習筆記 動態記憶體分配 物件、物件陣列的動態建立和釋放
宣告:註明程式碼 出處http://www.weixueyuan.net/view/6347.html 當我們需要為類物件動態分配儲存空間時,我們應該使用C++語言提供的new與new[]操作符,而不要使用C語言提供的malloc函式。 C++語言提供的new和new[
c++:為什麼要使用動態記憶體分配
例項化一個類有兩種方式: // 假設有一個類A // 方式一:直接定義法 A a; // 方式二:動態記憶體分配法 A * a = new A(); 兩者有什麼差別呢? 實際上,方式二即等價於如下程式碼: A * a = new A(); 等價於 A * a; a = n
C動態記憶體分配:(三)malloc/calloc/realloc/free使用注意事項
10、對於realloc不要將返回結果再賦值給原指標,即ptr=realloc(ptr,new_size)是不建議使用的,因為如果記憶體分配失敗,ptr會變為NULL,如果之前沒有將ptr所在地址賦給其他值的話,會發生無法訪問舊記憶體空間的情況,所以建議使用temp=realloc(ptr,new_size)
C語言動態記憶體分配:(一)malloc/free的實現及malloc實際分配/釋放的記憶體
一、malloc/free概述 malloc是在C語言中用於在程式執行時在堆中進行動態記憶體分配的庫函式。free是進行記憶體釋放的庫函式。 1、函式原型 #include <stdlib.h> void *malloc( size_t size
C++基礎學習筆記:類與動態記憶體分配
實現一個簡單的string類 user.h //!時間:2017年9月11日(週一)上午 //!內容:類與動態記憶體分配 //!備註:Test類實現簡單的string功能 //!最後修改時間:NULL //user.cpp #define _CRTDBG_MAP_ALLOC//記憶體
c++:動態記憶體分配(new和delete的使用)
//============================================================================ // Name : c++動態記憶體分配.cpp // Author : // Versi
學習筆記-C語言6(指標與動態記憶體分配)
1. 指標 指標的引入: 指標是C語言最強大的功能之一,使用指標可以儲存某個變數在記憶體中的地址,並且通過操作指標來對該片記憶體進行靈活的操作,例如改變原變數的值,或者構造複雜的資料結構。指標一般初始化為NULL(0)。& 是取地址運算,* 是間接運算子,通過 * 可以訪問與修改
C++PrimerPlus學習之類和動態記憶體分配
複製建構函式 如果沒有定義,編譯器將預設提供複製建構函式 原型Class_name(const Class_name &) StringBad(const StringBad &) 何時呼叫StringBad ditto(motto); Str
C++二維陣列動態記憶體分配【轉】
(轉自:https://www.cnblogs.com/Forever-Kenlen-Ja/p/3753566.html) /*申請3行4列的二維陣列記憶體*/ int **array; array = new int *[3];/*先申請3個int*型
連結串列的C語言實現 含動態記憶體分配
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
C++基礎學習之類和動態記憶體分配(9)
主要學習內容: 對類成員使用動態記憶體分配。 隱式顯式複製建構函式。 隱式顯式過載賦值運算子。 在建構函式中使用new所必須完成的工作。 使用靜態類成員。 將定位new運算子用於物件。 使用指向物件的指標。 實現佇列抽象資料型別。(像第(
C語言的儲存類別和動態記憶體分配
儲存類別分三大類: 靜態儲存類別 自動儲存類別 動態分配記憶體 變數、物件--->記憶體管理 記憶體考慮效率(時間更短、空間更小) 作用域 連結、---->空間 儲存器 ----->時間 其實儲存類別(時間、空間)和資料
C++ 二維陣列動態記憶體分配過載以及拷貝構造
總時間限制: 1000ms 記憶體限制: 65536kB // 在此處補充你的程式碼 描述 寫一個二維陣列類 Array2,使得下面程式的輸出結果是: 0,1,2,3, 4,5,6,7, 8,9,10,11, next