new乙個類物件和使用類名建立乙個物件有什麼區別?

2021-07-05 12:12:05 字數 1438 閱讀 4635

new乙個類物件和使用類名建立乙個物件有什麼區別?

用new來給乙個類的物件分配空間,和使用類名稱來定義乙個類的物件,有什麼區別?難道區別只是new的返回值是個指標,而物件定義得到的是變數名麼?或者是在儲存空間上不同?有什麼不同呢?具體什麼時候使用哪個方法呢?

——解決方案——————–

對,儲存空間上不同。

new出來的在堆上

直接定義的在棧上

——解決方案——————–

——解決方案——————–

棧上分配的在函式結束後會自己釋放,堆上的要自己手工釋放。

——解決方案——————–

——解決方案——————–

乙個在堆,乙個在棧

棧就是c*** xx這種的,是在程式執行前就分配好的,不需自已釋放

而堆,是執行時分配的,得自已釋放

還有就是對話方塊它們效果明顯,乙個無模式,乙個有模式,做個例子就很清楚了!

——解決方案——————–

要考慮實際情況

如果物件本身很小,或者沒有特殊的必要,還是要放在棧上,這樣有2個好處:

1 效率高

2 在堆上建立物件容易引起記憶體碎片

——解決方案——————–

使用new在堆上分配,給程式設計師留下了很大的自由度,這可能是高手的**中使用new比較多的原因

使用new需要更多的控制管理,由此帶來了程式的高效和執行的更加健壯

c語言的精華就是指標運算管理,使用new是產生乙個自由使用的指標物件的好辦法

使用new的其它好處:

1、需要的時候才new(在複雜許可權和業務邏輯系統中很重要)

2、物件可靠性檢查(沒有棧空間的限制問題)

3、物件的適度留用控制

個人認為,如果可以不使用new,還是不要搞得貌似高手好:)

——解決方案——————–

象cmydlg dlg;這樣的物件,

使用new 的必要性可能較小,其生成週期通常不超過父視窗,如果需要長的生成週期,可以使用類成員變數

當然如果cmydlg 含有很多的資料及時初始化例程,使用new應該更好,這樣你就應該進行必要的檢測,象如上的**不是很好,因為你必須在函式體內delete dlg,否則會發生記憶體洩露,所有new的物件如果不delete,只有在宿主程式退出,才會由系統釋放

乙個指標類成員的流程大概為:

在.h中

class cmydlg;

或者包含標頭檔案:#include 「mydlg.h 」

標頭檔案中宣告類成員變數:

cmydlg *m_pdlg;

在.cpp中

建構函式中初始化:m_pdlg = null;

使用:

if(m_pdlg == null)

在析構函式中

if(m_pdlg != null) delete m_pdlg;

**

C 用new和不用new建立類物件

1,new建立類物件,使用完後需使用delete刪除,跟申請記憶體類似。所以,new有時候又不太適合,比如在頻繁呼叫場合,使用區域性new類物件就不是個好選擇,使用全域性類物件或乙個經過初始化的全域性類指標似乎更加高效。2,非new建立類物件,建立方式,new物件指標作為函式引數和返回值需要手動釋放...

乙個類如何只建立乙個物件?

思路 由於只有全域性與靜態可以被類中所有成員使用,而類中存在靜態的成員變數 成員函式,由此考慮用靜態來解決。具體方法 建構函式只呼叫一次 將成員函式 構造 析構 定義為私有,定義靜態成員變數char s 所有變數所共有 再編寫 靜態 2個函式 建立與釋放函式 函式1功能 當s null new開闢空...

C 用new和不用new建立類物件區別

起初剛學c 時,很不習慣用new,後來看老外的程式,發現幾乎都是使用new,想一想區別也不是太大,但是在大一點的專案設計中,有時候不使用new的確會帶來很多問題。當然這都是跟new的用法有關的。new建立類物件,使用完後需使用delete刪除,跟申請記憶體類似。所以,new有時候又不太適合,比如在頻...