1. 程式人生 > >C++動態分配記憶體空間 : new 和 delete

C++動態分配記憶體空間 : new 和 delete

1.什麼是new和delete

在C語言中我們可以利用標準庫函式中的 malloc 和 free 來動態分配記憶體空間,而在C++中提供了運算子 new 和 delete 來取代 malloc 和 free 進行動態分配記憶體空間。

2.new的用法表示式

 new 資料型別 ;                  //申請記憶體空間。
 new 資料型別   (初值);          //申請記憶體空間時,並指定該資料型別的初值。
 new 資料型別   [記憶體單元個數];    //申請多個記憶體空間。

3.new程式碼實現

int* a = new int (4);   //開闢一個int型別指標賦值給a,並地址中的內容賦值為4。
int* b = new int[100]; //開闢一個大小為100的整型陣列空間。

4.delete的用法表示式

 - delete 資料型別;      //釋放單個數據型別記憶體
 - delete 資料型別;      //釋放陣列空間

5.delete程式碼實現

int* a = new int (4);   //開闢一個int型別指標賦值給a,並地址中的內容賦值為4。
delete a;               //釋放單個int的空間
int* b = new int[100];  //開闢一個大小為100的整型陣列空間。
delete [] a;            //釋放int陣列空間

  • 使用new運算子動態配置的空間,在整個程式結束後不會自動還給系統,因此需要自己使用delete歸還記憶體空間。
  • 當由於new申請空間過大等原因導致分配記憶體失敗時,new返回一個NULL。
  • 當new申請一個數組時,需要用delete[]釋放。
  • delete p;只是釋放*p中的內容,而不改變指標p本身,p存放的依然是申請空間時的地址。
  • new和delete是c++中的運算子,不是函式
  • -

相關推薦

C++動態分配記憶體空間 new delete

1.什麼是new和delete 在C語言中我們可以利用標準庫函式中的 malloc 和 free 來動態分配記憶體空間,而在C++中提供了運算子 new 和 delete 來取代 malloc 和 f

C++動態分配記憶體(new)撤銷記憶體(delete)

在軟體開發過程中,常常需要動態地分配和撤銷記憶體空間,例如對動態連結串列中結點的插入與刪除。 在C語言中是利用庫函式malloc和free來分配和撤銷記憶體空間的。 C++提供了較簡便而功能較強的運算子new和delete來取代malloc和free函式。

C語言--動態分配記憶體空間的使用方法

#include <stdio.h> #include <stdlib.h> int main() { int i; int *nums; //為指標分配動態的記憶體空間 // nums = (int *)mall

動態分配記憶體 and malloc&new and 陣列的動態分配、初始化(memset)撤銷(delete)

 在計算機的系統中有四個記憶體區域:1)棧:在棧裡面儲存一些我們定義的區域性變數和形參。2)字元常量區:主要儲存一些字元常量,比如:char *p_str="cat",其中"cat"就儲存於字元常量區裡。3)全域性區:在全域性區裡儲存一些全域性變數和靜態變數4)堆:主要是通過

C++ 動態分配陣列空間,以及opencv中Mat類的初始化

在C++中,如果想要申請動態陣列,必須要用動態分配的方式。 int **matrix=new int*[num_of_rows]; for(int i=0;i<num_of_rows;i++){ int *row=new int[num_of

C++NewDelete的用法

//C++裡 陣列new 和delete問題 //對於陣列new的不同方式 和不同的釋放方法 //---------------------------------------------

C/C++動態分配記憶體

本部落格對以下幾篇部落格進行總結歸納:1.   需要動態分配記憶體的原因陣列是最常用的一種資料結構,其缺點是使用時必須確定陣列大小,因此會帶來一些不便:1)需要儲存的資料大小不確定時,預先開闢的空間太小裝不下,太大則浪費空間;2)使用的資料大部分預設儲存在棧(stack)裡,

C++(二十九) — new delete

1、基本用法,定義變數、陣列、物件 class test { public: test(int a_, int b_) { a = a_; b = b_; cout << "建構函式執行" << endl;

c++動態記憶體分配newdelete的使用)

//============================================================================ // Name : c++動態記憶體分配.cpp // Author : // Versi

C++ new動態分配記憶體delete釋放記憶體

C++中使用簡便而強大的new和delete運算子來進行動態記憶體的分配. 值得注意的是,new和delete和c語言中的malloc和free不同,new和delete是運算子,因此執行效率更高. 如何使用new , delete 呢? 首先我們來看一段程式碼: i

C++】動態記憶體分配詳解(new/new[]delete/delete[])

一、為什麼需要動態記憶體分配? 在C++程式中,所有記憶體需求都是在程式執行之前通過定義所需的變數來確定的。 但是可能存在程式的記憶體需求只能在執行時確定的情況。 例如,當需要的記憶體取決於使用者輸入。 在這些情況下,程式需要動態分配記憶體,C ++語言將運算子new和de

C++中,用newdelete分配釋放記憶體

https://www.cnblogs.com/hugongai/p/5833070.html1.例如,給一個4*5的二維陣列分配記憶體方法一:直接申請二維陣列,逐一分配記憶體 1 int **array; 2 //分配記憶體 3 array=new int*[4];

C++動態記憶體(二)過載newdelete

一、過載的原因     用new建立動態物件時會發生兩件事:(1)使用operatoe

C儲存類、連結記憶體管理--動態分配記憶體及型別限定詞

文章目錄 儲存類說明符 儲存類和函式 動態分配記憶體 `malloc`函式 `free`函式 `calloc`函式 動態分配記憶體的缺點 C型別限定關鍵字

乾貨!!c++newdelete工作原理 以及 針對連結串列節點過載operator new operator delete 實現連結串列節點使用記憶體池申請釋放空間

第一部分: new和delete的實現原理 開始談之前我們應該瞭解另一個概念“operator new”和“operator delete”: new操作符呼叫一個函式來完畢必需的記憶體分配,你可以重寫或過載這個函式來改變它的行為。new操

c語言動態與靜態分配記憶體空間的區別

所謂動態記憶體分配就是指在程式執行的過程中動態地分配或者回收儲存空間的分配記憶體的方法。動態記憶體分配不象陣列等靜態記憶體分配方法那樣需要預先分配儲存空間,而是由系統根據程式的需要即時分配,且分配的大小就是程式要求的大小。例如我們定義一個float型陣列:float score[100]; 但是,在使用陣列

C++之 new 動態分配記憶體

動態記憶體分配 1.堆記憶體分配 : C/C++定義了4個記憶體區間:程式碼區,全域性變數與靜態變數區,區域性變數區即棧區,動態儲存區,即堆(heap)區或自由儲存區(free store)。 堆的概念: 通常定義變數(或物件),編譯器在編譯時都可以根據該變數(或物件)的

C++ 記憶體分配回收 (new delete

“new”是C++的一個關鍵字,同時也是操作符。對於new的內容總結。 1、new的過程 當我們使用關鍵字new在堆上動態建立一個物件時,它實際上做了三件事:獲得一塊記憶體空間、呼叫建構函式、返回正確的指標。當然,如果我們建立的是簡單型別的變數,那麼第二步會被省略。假如我們

c++ 的用 new delete 進行二維陣列動態記憶體的建立刪除

1.陣列指標 A (*ga)[n] = new A[m][n]; ... delete []ga; 2.二級指標 A** ga = new A*[m]; for(int i = 0; i < m; i++)

C++new動態分配記憶體生成陣列

#include <iostream> using namespace std; static int b[3][3]; void change(int (*a)[3])//轉置函式 { for(int m=0;m<3;m++) { for(int