c什麼時候適合使用new,c裡面建立物件,什麼時候應該用new什麼時

2021-05-15 23:37:11 字數 4983 閱讀 6560

1樓:匿名使用者

需要動態分配記憶體時使用。

比如說你要宣告一個類的物件或(物件指標),你不知道這個物件需要佔用多大的記憶體空間,這個時候就使用new

動態申請的記憶體在使用之後完了之後需要釋放,與之對應的就是delete操作

c++裡面建立物件,什麼時候應該用new什麼時

2樓:匿名使用者

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];這樣可以,因為都是在執行階段才進行。

3樓:匿名使用者

凡是c++就只用new吧。免得混著用,容易出錯。

c++中new的用法

4樓:老表有點呈

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

1、開闢單變數地址空間

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

2、開闢陣列空間

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

5樓:手機使用者

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

6樓:幸運夕夕

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常常是為了考慮效能,所以會配合記憶體池一起使用。

7樓:匿名使用者

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

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

8樓:

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++)

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

多琢磨一下!

9樓:有界函式

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

c++中 new 在什麼時候用?? 為什麼 class c = new class報錯

10樓:匿名使用者

1>class c=new class

new class 表示在堆疊中建立一個class類變數,而要訪問這個變數,必須通過指標來訪問,因此

應該改為:class *c=new class;

2>請高手解釋下 class *c = new class ; class *c ; class c ;

第一個是在堆疊中建立class型別的變數並用指向class類變數的指標指向它

第二個是建立一個指向class型別變數的指標

第三個是建立class型別的變數

3>建議在類、變數、函式名等命名時儘量不要與關鍵字相似,最好去找一些命名規則來看一下,其實命名是很有講究的,像你所提問題中的class最好改為cclass這是因為類的命名規則一般前面都會加一個「c」以表示這是一個類。

11樓:匿名使用者

new返回的是一個

指標,所以必須用指標接收

class *c = new class ; // 定義一個class類的指標c,建立一個class類物件,並賦給這個指標

class *c ; // 定義一個class類指標c

class c ; // 定義一個class類物件

物件呼叫屬性用.操作符,指標呼叫屬性用->操作符,第三種在實際應用中不常用,因為涉及到多臺繼承等問題都用指標解決。

12樓:追夢人奮鬥著

new主要為指標分配記憶體,不能亂用,類建立時不需要new的,跟純粹的物件導向的語言不同。比如:

int * a=new int;

在連結串列中經常用到new為新建的struct或class非配記憶體空間,並用指標接收

13樓:匿名使用者

new函式是返回的是一個指標,當然必需賦值給一個指標.

c++什麼時候一定要用new分配堆記憶體

14樓:砍侃看

一是需要一塊大記憶體的時候,一般棧的大小在8m左右(具體看編譯器,不過一般都不會太大),所以需要大記憶體時需要new。

二是給全域性或作用域較大的指標分配物件時。

三是一般自定義的類物件用new,也不是必須用new。

以上是我個人的體會,不一定很準確,僅作參考。

15樓:幻夢·人生

new是c++語法所規定的堆分配空間函式。

malloc是c語法所規定的對分配空間函式。

差別在於,c++是物件導向進行程式設計的。由於物件是包含建構函式的,在建立物件時,應當呼叫其建構函式,對其內部的資料進行初始化。new可以在分配空間的同時呼叫建構函式對此段空間進行初始化。

而malloc只能夠分配一段空間,不能呼叫建構函式。

所以在c++語言的開發中,要求使用new操作符進行堆空間的分配。

c語言什麼時候使用陣列什麼時候使用指標

任何時候都可以使用陣列,使用指標。定義時,通常只有字元指標,和字元陣列指標直接定義。用來表示字串或字串陣列。其他一般定義陣列。操作時用指標或陣列。其他指標,多半用在引數傳遞,資料結構內部 不確定需要記憶體的大小,或者連結串列,二叉樹等鏈式結構 的時候。還有一種是有些函式引數就是指標,這時定義一個指標...

蘆薈膠適合什麼時候用,蘆薈膠什麼時候使用最好

1.蘆薈膠 晚霜 在晚霜里加一點點蘆薈膠,這樣塗在臉上吸收起 來很快,而且還感覺水水的。蘆薈膠修復作用加上晚霜足夠的補水保溼作用,兩全其美。2.蘆薈膠修復痘痘 成熟的有膿包的痘痘,可以用洗乾淨的手把膿包擠掉,然後再傷口上擦上蘆薈膠,可以多用一點,對痘痘的儘快恢復。3.蘆薈膠做匯入 方法很簡單的,就是...

英文在什麼時候使用斜體英文在什麼時候使用斜體

補充樓上bai的 1.非品牌的du 交通工具的名zhi字,比如dao 泰坦尼克 這艘船的名內字 titanic 需要斜體寫,福特車容 ford 不用斜體 2.非英語的外國詞彙 像 etc.的全寫 是 拉丁語 et cetera,這裡 et cetera 要斜體 3.個別強調的詞,斜體。e.g.i r...