C 物件陣列建立與釋放問題,new與delete

2021-08-16 03:09:13 字數 3923 閱讀 1007

1樓:

#include

using namespace std;

class cvector

{private:

float* p_val;

int size;

public:

cvector(float *,int s);

cvector(const cvector &v);

~cvector();

void display(){

for(int i = 0;i < size;i++)cout<

程式沒有問題,主要是i沒有初始化,改完後在我這執行正常。

物件c1: 1 2 3 4 5

物件c2:1 2 3 4 5

物件c3: 6 7 8 9 10

2樓:

3樓:風若遠去何人留

問題應該出在i上吧

沒看到你的i變數定義在**

改了一下

執行結果是正確的

#include

using namespace std;

class cvector

int main()

,b[5]=;

cvector c1(a,5),c2(c1);

cvector c3(b,5);

cout<<"物件c1: ";

c1.display();

cout<<"物件c2:";

c2.display();

cout<<"物件c3: ";

c3.display(); // 這裡為什麼輸出的資料是亂碼?

return 0;

}type & func_name(va_list)的形勢,&修飾的是前面的type 表示其返回值為引用型別。 所以&緊跟前面的型別

用引用做返回值可以減少中間臨時變數的生成,從而增加效率是否使用引用返回值,在過載運算子時沒有強制的要求,全憑自願但是如果用一些stl 模板, 模板會對過載型別有要求,如果不一致會報錯。其他的倒是沒什麼大的影響

4樓:匿名使用者

你這個是你的源**麼?類名不對,i 也沒定義。改了之後倒是能正確輸出。

class cvector

private:

float* p_val;

int size;

public:

cvector(float *,int s);

cvector(const cvector &v);

~cvector();

void display(),b[5]=;

cvector c1(a,5),c2(c1);

cvector c3(b,5);

cout<<"物件c1: ";

c1.display();

cout<<"物件c2:";

c2.display();

cout<<"物件c3: ";

c3.display();   //             這裡為什麼輸出的資料是亂碼?

system("pause");

return 0;

在c++中,釋放new分配的記憶體空間時,使用delete和delete[]是不是有區別?詳細說明下

5樓:匿名使用者

c++告訴我們在**用 new 分配的單個物件的記憶體空間的時候用 delete,**用 new 分配的一組物件的記憶體空間的時候用 delete。

樓主的這個問題提得很好。很多人注意到了這個問題,但是卻不清楚為什麼要這樣做,不這樣做行不行。

關於 new 和 delete,其中又分為兩種情況:(1) 為基本資料型別分配和**空間;(2) 為自定義型別分配和**空間。

對於 (1),上面提供的程式已經證明了 delete 和 delete 是等同的。但是對於 (2),情況就發生了變化。請看下面的程式。

#include ;

using namespace std;

class t

~t()

};int main()

大家可以自己執行這個程式,看一看 delete p1 和 delete p1 的不同結果,我就不在這裡貼執行結果了。

從執行結果中我們可以看出,delete p1 在**空間的過程中,只有 p1[0] 這個物件呼叫了解構函式,其它物件如 p1[1]、p1[2] 等都沒有呼叫自身的解構函式,這就是問題的癥結所在。如果用 delete,則在**空間之前所有物件都會首先呼叫自己的解構函式。

基本型別的物件沒有解構函式,所以**基本型別組成的陣列空間用 delete 和 delete 都是應該可以的;但是對於類物件陣列,只能用 delete。對於 new 的單個物件,只能用 delete 不能用 delete **空間。

所以一個簡單的使用原則就是:new 和 delete、new 和 delete 對應使用

6樓:匿名使用者

如果new得是一個變數,那麼使用delete就可以。

但是如果new得是一個陣列,使用delete的話只能釋放陣列的第一個元素佔用的記憶體,這會造成嚴重的記憶體洩漏的。

使用new申請的陣列應該使用delete來銷燬它。

7樓:匿名使用者

delete一般只釋放用new所分配的,並且只分一個型別的大小的記憶體,每個delete和new對應;而delete釋放用new所分配的,並且為同一種型別的多個元素一次所分配的記憶體。也就是用new一次為一個元素分配記憶體時,用delete;而用new一次為一個集合(陣列)分配記憶體時,用delete。如char *p=new char時用delete p;youclass *pclass=new youclass時用delete pclass;又如用char *p=char[10]時用delete p;youclass *pclass=new youclass[10]時用 delete *pclass;

8樓:匿名使用者

delete 是銷燬一個變數!delete 是銷燬一個變數陣列

c++怎麼用new建立的物件的陣列,又怎樣刪除物件

9樓:

class a

;void func()

10樓:流浪三毛牛

int main()

11樓:我又中槍了

int *a=new int;

char *b=new char; //初值為1int *c=new int[100]; //建立100個動態物件

delete a;

delete b;

delete c;

12樓:盤子飽了又餓了

a aa = new a[100];

delete aa;

能看懂吧?

c++關於使用new建立物件,以下**使用new建立的物件怎樣釋放?

13樓:

delete new cname(name[i]);

即相當於連續執行了如下2句:

cname *p = new cname(name[i]);

delete p;

14樓:匿名使用者

用delete函式釋放

c語言二維陣列與指標運算,C語言二維陣列與指標運算

在 p 4 中p是指向一個有4 個int元素的一維陣列的首地址,int p 4 a就相當於int p 4 p a 兩個語句,所以 p i 指向i行地址,p i c 指向i行c列的地址即a i c int p 4 a 表示指向一維陣列 4列 的指標,然後a 0 地址給了p,p i就表示a i 的地址....

c 二維陣列賦值,c 二維陣列怎麼定義與賦值?

沒有,如果想a 0 b 那麼使用交錯陣列。int a new int 5 int b new int a 0 b 同時,你的兩個陣列宣告錯誤。c net中如何定義二維陣列並給其賦值 定義一個3行2列的二維陣列,元素型別為int int values values 0,1 100 修改第一行第二列元素...

C語言指標陣列與二維陣列行指標小問題

指標陣列 copy 該陣列中存放的全部都是指標,例如 原例子中的char name,這個是一個標準透了的一維陣列,就像是陣列 int a 4 a 1 2 a 2 3 不同的是陣列name存放的是指標,陣列a存放的是數字 name 1 name 2 表示的是把name 2 的指標賦值給name 1 就...