c 中的new一般是什麼情況下使用

2021-08-16 03:09:13 字數 5612 閱讀 3886

1樓:

new 是申請動態儲存空間

⑴new可用來生成動態無名變數,

如 int *p=new int;

int *p=new int [10]; //動態陣列的大小可以是變數或常量;而一般直接宣告陣列時,陣列大小必須是常量

又如:int *p1;

double *p2;

p1=new int(12);

p2=new double [100];

l 分別表示動態分配了用於存放整型資料的記憶體空間,將初值12寫入該記憶體空間,並將首地址值返回指標p1;

l 動態分配了具有100個雙精度實型陣列元素的陣列,同時將各儲存區的首地址指標返回給指標變數p2;

對於生成二維及更高維的陣列,應使用多維指標。

以二維指標為例

int **p=new int* [row]; //row是二維陣列的行,p是指向一個指標陣列的指標

for(int i=0; i

p[i]=new int [col]; //col是二維陣列的列,p是指向一個int陣列的指標

刪除這個二維陣列

for(int i = 0; i < row;i++)

delete p[i]; //先刪除二維陣列的列

delete p;

⑵使用完動態無名變數後應該及時釋放,要用到 delete 運算子

delete p; //釋放單個變數

delete [ ] p;//釋放陣列變數(不論陣列是幾維)

相比於一般的變數宣告,使用new和delete 運算子可方便的使用變數。

2樓:夜神月

用new來建立地址是動態建立的意思。

例如:int *a=new int; 建立的時候是不在記憶體裡面佔用空間的。

a=b; 給a賦值時才開闢空間給a

delete 其實就是刪除的意思。

例如:delete a; 釋放了a的記憶體,讓a所佔用的記憶體變得可用,a 不復存在

假如a已經被分配了記憶體空間,

如果給 a賦值後 即a=b; a原來的記憶體就變成懸掛的補可訪問的記憶體空間,

所以要改變a所指向的地址前,最好把a的地址先給別人,即 temp=a;

然後再賦值 a=b; 再釋放a 即delete temp;

3樓:windy笨笨狗

new() 分配這種型別的一個大小的記憶體空間,並以括號中的值來初始化這個變數;

new 分配這種型別的n個大小的記憶體空間,並用預設建構函式來初始化這些變數;

在堆中應用時一般要free()

4樓:匿名使用者

自己需要申請記憶體時使用。

其他人寫的**,很多裡面的new後面沒有對應的delete。

要麼他**有誤,要麼你沒有找到地方。

c++什麼情況下需要用new 20

5樓:匿名使用者

void func()

void main()

void main()

c++裡面, 建立物件, classname object(初始化引數);在stack棧裡面分配空間,自動釋放。

或者用 classname object=new classnam();在heap堆裡面分配空間,要手動釋放。當你不確定需要多大的時候用new

類裡面用new實現多型, 有的時候解決類

介面也用new, 這個一下說不清楚

用new有一定記憶體洩露的風險, 可以考慮用1:宣告分配記憶體是在編譯階段進行的,new分配記憶體是在執行階段進行的

2:宣告被放在棧中,new被分配在堆中或自由儲存區中

3:宣告建立陣列,在編譯階段是就為他分配記憶體。

new建立在執行階段 需要建立時就建立,不需要建立時還可以在執行時選擇陣列長度,

這就是因為int i;cin>>i;int a[i];不成功的原因,因為a[i]要在編譯階段就分配好記憶體,但是i在執行時才能知道

int i;cin>>i;int * a=new int[i];這樣可以,因為都是在執行階段才進行。

c++中new的用法

6樓:老表有點呈

c++中new運算子用於動態分配和撤銷記憶體的運算子。

1、開闢單變數地址空間

new int;  //開闢一個存放陣列的儲存空間,返回一個指向該儲存空間的地址.int *a = new int 即為將一個int型別的地址賦值給整型指標a. 2)int *a = new int(5) 作用同上,但是同時將整數賦值為5。

2、開闢陣列空間

要訪問new所開闢的結構體空間,無法直接通過變數名進行,只能通過賦值的指標進行訪問。用new可以動態開闢,撤銷地址空間。在程式設計序時,若用完一個變數,下次需要再用,可以在每次開始使用時開闢一個空間,在用完後撤銷它。

7樓:手機使用者

new int;//開闢一個存放整數的儲存空間,返回一個指向該儲存空間的地址(即指標)

new int(100);//開闢一個存放整數的空間,並指定該整數的初值為100,返回一個指向該儲存空間的地址

new char[10];//開闢一個存放字元陣列(包括10個元素)的空間,返回首元素的地址

new int[5][4];//開闢一個存放二維整型陣列(大小為5*4)的空間,返回首元素的地址

float *p=new float (3.14159);//開闢一個存放單精度數的空間,並指定該實數的初值為//3.14159,將返回的該空間的地址賦給指標變數p

new運算子使用的一般格式為   new 型別 [初值]   用new分配陣列空間時不能指定初值。如果由於記憶體不足等原因而無法正常分配空間,則new會返回一個空指標null,使用者可以根據該指標的值判斷分配空間是否成功。

delete運算子使用的一般格式為   delete [ ] 指標變數

例如要撤銷上面用new開闢的存放單精度數的空間(上面第5個例子),應該用   delete p;

前面用「new char[10];」開闢的字元陣列空間,如果把new返回的指標賦給了指標變數pt,則應該用以下形式的delete運算子撤銷該空間:

delete pt;//在指標變數前面加一對方括號,表示是對陣列空間的操作

例 開闢空間以存放一個結構體變數。

#include

#include

using namespace std;

struct student //宣告結構體型別student

;int main( )

執行結果為   wang fun 10123 m

8樓:幸運夕夕

c++中new的用法有三種,具體如下:

一、new operator,也叫new表示式;new表示式比較常見,也最常用,例如:

上面這個new表示式完成了兩件事情:申請記憶體和初始化物件。

二、operator new,也叫new操作符。這兩個英文名稱起的也太絕了,很容易搞混,那就記中文名稱吧。new操作符類似於c語 言中的malloc,只是負責申請記憶體,例如:

注意: 這裡多了一個operator。這是new的第二個用法,也算比較常見吧。

三、placement new,它用於在給定的記憶體中初始化物件,也就是說你手中已有一塊閒置的記憶體,例如:

那麼現在buffer是你所擁有閒置記憶體的指標buffer = new(buffer) string("abc"); //呼叫了placement new,在buffer所指向的記憶體中初始化string型別的物件,初始值是"abc",事實上,placement new也是new表示式的一種,但是比普通的new表示式多了一個引數,當然完成的操作和返回值也不同。

因此上面new的第一種用法可以分解兩個 動作,分別為後面的兩種用法。

注意:1、使用者是無法主動呼叫建構函式的,所以需要藉助placement new,但是使用者可以主動呼叫解構函式,所以用完這些物件後,呼叫解構函式,然後用對應分配記憶體的方法去釋放記憶體。

2、事實上malloc並不一定比operatornew節省多少時間,用placement new常常是為了考慮效能,所以會配合記憶體池一起使用。

9樓:匿名使用者

new的功能是動態分配記憶體。

語法就是 new 型別名t(初值列表)

10樓:

new 的作用是動態開闢空間,一般的形式估計你也會了。我就直接給你講題吧

你這個函式的作用是動態建立一個(n1+1)*(n2+1)的二維陣列(注:在c++中 直接用new(a)這種形式是錯誤的)

首先明白所謂指標就是存放地址的變數,這一點最重要double **a=new double*[n1+1];

這句話的意思是開闢以一塊連續的空間用來儲存指標變數(指標的指標),它的大小是n1+1。*a是指標,那麼**a就是存放指標的指標。那個new後的double* 相當於一個強制轉換。

因為用new時和陣列的名字無關所以[n1+1]前的陣列名可以省略。這個類比於new double[3];

for(i=0;i<=n1;i++)

這個語句就是給把指標付給指標的指標,看下邊的圖你就明白了;

多琢磨一下!

11樓:有界函式

推薦你看一下effictive c++,這裡面有單獨的一節是講 new 的。細緻的講不了,可以自己去看看。

c++中new是什麼意思

12樓:隨便什麼名啦啦

c++中new運算子用於動態分配和撤銷記憶體的運算子。

new運算子使用的一般格式為new 型別 [初值]。

用new分配陣列空間時不能指定初值。如果由於記憶體不足等原因而無法正常分配空間,則new會返回一個空指標null,使用者可以根據該指標的值判斷分配空間是否成功。

一般來說,使用new申請空間時,是從系統的「堆」(heap)中分配空間。申請所得的空間的位置時根據當時的記憶體的實際使用情況決定的。但是,在某些特殊情況下,可能需要在程式設計師指定的特定記憶體建立物件,這就是所謂的「定位放置new」(placement new)操作。

13樓:帷幕

動態申請記憶體空間,那句話的意思就是申請一個大小與str字串常量大小相同的字元陣列。c++中new出來的要用delete刪除。

14樓:匿名使用者

new一般表示建立一個類的物件(例項),返回該類物件的指標。

假設我們有class c{}; 要建立一個c類的物件(例項),主要有兩種方式。一個是用 c obj; 直接定義。這種方式定義的物件記憶體是在棧上(靜態記憶體)分配的。

另一種方式是定義一個類的指標然後用new來建立該物件並返回需要的指標地址。這種方式是用 c* obj = new c(); 此方式分配的記憶體是在堆上。

堆和棧的區別請參考:

另外,new c()會呼叫c類的無參建構函式。通過new c(...)傳入不同的引數可以呼叫對應的c的建構函式。

一般什麼情況下需要做腸鏡呢,什麼情況下需要做腸鏡?

結腸鏡是消化內科中的常見檢查方法之一,主要用於對原因不明的結腸疾病 慢性腹瀉等明確診斷,或用於結腸息肉切除或結腸術後複查。纖維結腸鏡的適應症為 1 便血與大便潛血原因待查 2 排便異常,如慢性腹瀉或長期進行性便祕 3 x 線鋇劑灌腸檢查結果陰性,但有明顯的腸道症狀,疑有惡變者,或x線鋇劑檢查異常,但...

一般納稅人什麼情況下開專用發票,什麼情況下開普通發票

一般納稅人按照簡易計稅方法計稅的,除出租或者 不動產以外,按照3 徵收率計算應納增值稅額。可以開具3 的增值稅發票,包括增值稅專用發票和增值稅普通發票。發票開具的最高金額,要看國稅局給企業設定的最高開票限額。比如稅局設定的最高開票限額是100萬元,則每張發票金額最高不能達到100萬元,即最高可以開具...

一般是什麼情況下使用一寸的相片,一般紅底的一寸照片都拿來幹什麼用

背景是藍色的,小時候用的是紅色的,大了就用藍色的了 什麼是大一寸相片?大一寸相片是指畫面實際大小為3.2x4.5cm.一般去影樓拍的都會稍大點 其實正規的大一寸使用的時候只是3.2x4cm邊角直徑4mm圓角 您的這張相片不是大一寸相片。一寸 背景應該是什麼顏色的?有要求嗎 有個要求紅的 有個要求藍的...