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...