1、malloc/free和new/delete的區別
malloc和free和new/delete的共同點是:都是從堆上申請空間的,並且需要使用者手動釋放。
不同點:
1、malloc和free是函式,new和delete是操作符
2、malloc申請的 空間不會被初始化,new可以初始化
3、malloc申請空間時,需要手動計算空間大小並傳遞,new只需在後跟上空間的型別即可
4、malloc返回值是void*,使用時必須強轉,new不需要,new後跟的是型別
5、malloc申請空間失敗時,返回null,因此使用時必須判空,new不需要,但是需要捕獲異常
6、申請自定義型別物件時,malloc/free只會開闢空間,不會呼叫構造和析構,而new在申請空間後會呼叫建構函式完成物件的初始化,delete在釋放空間前會呼叫析構函式完成空間中資源的清理
7、new/delete比malloc和free的效率稍微低點,因為new/delete的底層封裝了malloc和free
2、設計乙個類,該類只能在堆上建立物件
思路:建構函式私有化
1、將類的建構函式私有,拷貝構造宣告成私有,防止別人呼叫拷貝在棧上生成物件
2、提供乙個靜態的成員函式,在該靜態成員函式中完成堆物件的建立
class heaponly
private:
heaponly()
heaponly(const heaponly&);
heaponly(const heaponly&) = delete;
};
3、設計乙個類,該類只能在棧上建立物件
思路:只能在棧上建立,即不能在堆上建立,因此只要將new的功能遮蔽掉即可,遮蔽掉operator new和定位new表示式
4、單例模式
乙個類只能建立乙個物件,該模式可以保證系統中該類只有乙個例項,並提供乙個訪問它的全域性訪問點
餓漢模式:
一上來就載入
懶漢模式
延遲載入,啟動快,控制多個單例的例項化順序
static single* gteinstance() mtx.unlock(); } return
5、記憶體洩漏
是指因為疏忽或錯誤造成程式未能釋放已經不再使用記憶體的情況,記憶體洩漏並不是指內存在物理上的消失,而是應用程式分配某段記憶體後,因為設計錯誤,失去了對該段記憶體的控制,因而造成記憶體的浪費
一般分為:堆記憶體洩漏、系統資源洩漏
動態記憶體管理常見面試題
學完c語言動態記憶體管理 和 c 動態記憶體管理我們就應該深入的去對比和了解兩個的特性。共同點 都是從堆上開闢空間,最後都需要手動釋放 不同點 malloc delete是標準庫函式,new delete是操作符 new建立物件時會呼叫建構函式 開空間 delete會呼叫析構函式,而malloc f...
C 常見面試題
1.c中static有什麼作用 1 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性,故使用static在不同的檔案中定義同名函式和同名變數,而不必擔心命名衝突。2 static的第二個作用是保持變數內容的持久。儲存在靜態資料區的變數會在程式剛開始執行時就...
C常見面試題
1.bool型別,值為true或flase 正確答案 bool flag if flag if flag 以下均為不良風格 if flag true if flag 1 if flag false if flag 0 2.char 3.int int x if x 0 if x 0 4.float ...