C 物件建立釋放,C 物件建立釋放

2021-08-16 03:09:14 字數 3657 閱讀 9434

1樓:重新整理①丅

你得用指標陣列來放著你所有new出來的物件的指標,你說的這種方式,註定了記憶體洩漏,因為你已經沒法找到前4個物件的指標了。

2樓:搗蒜大師

你new5個物件就要有5個指標啊,不去建立個指標陣列,像你這樣已經找不回了,也沒有銷燬,已經記憶體洩露了好吧?

3樓:青木長悅

你又一個筆記本,你想記上5親朋好友的聯絡**、地址、姓名等等。但奇怪的很,這個筆記本記上去的每一條資訊,可能會出現在任意一頁任何一行上,而它只會在你記上一條之後告訴你,著條記錄在某頁某行。你想,那好吧,我記頁數行數總比記那些名字**地址方便吧。

但是你記性不好,你說,我記不住,得用一張小紙條寫上頁行,揣在兜兜裡。但是呢,你很摳門,最後,只用那麼一小張小紙條,這個紙條只能記一個(頁行)。

後面的事情,就是你在這張紙條上記了第一個親戚朋友的資訊的頁行,接著又用橡皮擦擦掉記上了第二個親戚朋友的頁行。直到最後的一位。這時候,前4個親戚朋友,確定是仍在你的筆記本中。

但是已經沒有辦法找到這些資訊的位置了。(直到整個程序結束,作業系統將整個筆記本擦除前,這四塊資料將被一直佔用。這四塊資料已無法被正常地利用了但卻霸佔了實際地記憶體且你(程式設計師)已沒有正常地方法進行釋放了。

記憶體洩漏)

c++用new建立類物件問題

4樓:匿名使用者

myclass *a = new myclass 這句話的意思是建立一個myclass型別的指標a,並生成一個myclass物件,使指標a指向這個物件。 這個物件是匿名物件沒有名字。

5樓:匿名使用者

該物件沒有名字,但可以解指

針使用該物件,或者用引用 myclass & b = *a; 那麼b 和 *a 表示同一回個物件了。如果

答myclass b = *a;這樣,a 和 b是2 個物件 只是裡面的內容一樣。

6樓:匿名使用者

用關鍵字new生成的

物件是無名的,只是在動態記憶體中利用建構函式生成一個新物件,且回返回指向這個物件的指標,答對於myclass *a = new myclass;,可以利用a->來訪問該類的資料成員和成員函式,也可以用複製建構函式進行復制......,總之,除了名字和儲存位置之外,與普通的類例項沒有多大區別,不過要注意的是,在不需要該類物件時,要及時釋放,並應與解構函式相互協調。

7樓:

myclass * a=new myclass

呼叫myclass的預設構bai造du函式建立了一個myclass物件zhi,如果你未dao顯示定義任何回形式的建構函式,編譯器會答為你合成一個預設建構函式,並用myclass型別的指標指向該物件,和此物件相關聯

對此指標解引用可以獲得該物件

8樓:最愛那個小青春

ctest* ptest = new ctest();

delete ptest;

ptest用來接收類物件指標。

不用new,直接使用類定義申明:

ctest mtest;

此種建立方式,使用完後內不需要手動釋

放,該類解構函式會容自動執行。而new申請的物件,則只有呼叫到delete時再會執行解構函式,如果程式退出而沒有執行delete則會造成記憶體洩漏。

2、只定義類指標

這跟不用new申明物件有很大區別,類指標可以先行定義,但類指標只是個通用指標,在new之前併為該類物件分配任何記憶體空間

9樓:f22張傑

a取內容不就是物件本身了麼。或者myclass * a=new myclass myclass b=*a;b就是物件了。

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

10樓:匿名使用者

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

11樓:匿名使用者

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

c++怎麼用new建立類物件?

12樓:

你是在類b的內部建立類a的物件麼?

那非常簡單,在類b的內部寫(private還是public塊都行,專根據具體情況

屬)a a;

或者a *a = new a();

當然前提是a的建構函式是無參的,如果有引數要寫上實參如果是說你的類b繼承了類a(即類b是類a的派生類),你想用new建立上轉型物件,就成了

a *a = new b();

13樓:匿名使用者

假設bai類名字為 t 使用語法 :t* object = new t(), 其中du

括號裡可以填寫類zhi初始化dao

的引數, 得到的 object 是一個版t型別的指標,別權忘了用delet object 釋放記憶體。

當c++程式用new 分配記憶體的時候,會比c的malloc 做一些額外的工作,尤其是使得類裡面使用的std標準庫型別的變數的到合適的初始化。此外,如果有自己編寫的記憶體管理器,new 還有一個變種: t* object = new (manager) t(), 如果需要, 請參考:

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

14樓:

class a

;void func()

15樓:流浪三毛牛

int main()

16樓:我又中槍了

int *a=new int;

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

delete a;

delete b;

delete c;

17樓:盤子飽了又餓了

a aa = new a[100];

delete aa;

能看懂吧?

C 怎麼用new建立類物件,C 用new建立類物件問題

你是在類b的內部建立類a的物件麼?那非常簡單,在類b的內部寫 private還是public塊都行,專根據具體情況 屬 a a 或者a a new a 當然前提是a的建構函式是無參的,如果有引數要寫上實參如果是說你的類b繼承了類a 即類b是類a的派生類 你想用new建立上轉型物件,就成了 a a n...

C程式釋放資源的問題?謝謝,C 釋放資源

gc,一個服務clr的。有兩個特點,前人的總結。但不是scott他們說的。我是這麼翻譯的 1.當程式不再執行的時候,gc可以從記憶體中刪除物件。2.gc在原則上釋放那些不得不釋放的程式任務,比如釋放你所要求的釋放 dispose 的和造成記憶體溢位的程式。實際上我認為在伺服器上打上framwork2...

c語言釋放連結串列記憶體的問題,C語言釋放連結串列記憶體的問題

把連結串列建立的函式貼出來。否則難以判斷。還有lnode 和linklist的型別定義貼出來再請求一次,把lnode 和linklist的型別定義貼出來!從 l next 的用法,我推測linklist是一個結構體指標型別,作用是指向連結串列頭。可是你在malloc的時候,用的sizeof link...