C 動態記憶體常見面試題解析

2022-06-05 03:03:16 字數 1261 閱讀 7616

malloc/free和new/delete傻傻分不清?動態記憶體管理的面試題難道你了?來看這篇文章,包你全會。

(1)malloc/free是函式, new/delete是操作符;

(2)malloc/free不會呼叫構造/析構函式,new/delete會呼叫構造/析構函式;

(3)malloc申請的空間不能初始化,new申請的空間可以初始化;

(4)malloc返回的void*需要強轉,new後跟的是空間型別,不需要;

(5)malloc失敗返回null,使用時需要判空,new失敗直接拋異常;

(6)malloc申請的空間大小需要自己計算,new申請的空間大小,後面跟上空間型別就行;

(7)new/delete效率比malloc/free稍微低點,因為new/delete的底層封裝了malloc/free。

將類的建構函式,拷貝構造宣告成私有。防止別人呼叫拷貝在棧上生成物件。提供乙個靜態的成員函式,該靜態成員函式完成堆物件的建立

class

heaponly

private

:    heaponly(){}

//c++98

//1.只宣告,不實現。因為實現可能會很麻煩,而你本身不需要

//2.宣告成私有

heaponly(const heaponly&);

//or

//c++11

heaponly(const heaponly&) = delete;

};

只能在棧上建立物件,即不能在堆上建立,因此只要將new的功能遮蔽掉即可,即遮蔽掉operator new和定位new表示式,注意:遮蔽了operator new,實際也將定位new遮蔽掉   

class

stackonly

private

:

void* operator

new(size_t size);

void* operator

delete(void*p);

};

動態記憶體管理常見面試題

學完c語言動態記憶體管理 和 c 動態記憶體管理我們就應該深入的去對比和了解兩個的特性。共同點 都是從堆上開闢空間,最後都需要手動釋放 不同點 malloc delete是標準庫函式,new delete是操作符 new建立物件時會呼叫建構函式 開空間 delete會呼叫析構函式,而malloc f...

c 常見面試題解析

1.定義乙個空的類不含任何成員變數和函式,對其求sizeof 結果是多少呢?若於這個空類新增乙個建構函式和析構函式結果又是多少呢?若把析構函式標記為虛函式呢?class empty class object class vobject void main a a other void printf ...

SQL 常見面試題解析

著名的技術問答 stack overflow 發布了 2019 年度開發者調查報告,sql 在最受歡迎的程式語言中排在了第 3 名,超過一半的開發者在工作中需要使用 sql。無論你是打算從事資料庫開發或資料庫管理 dba 還是成為一名資料分析師或資料科學家,又或是 web 移動開發工程師,甚至是產品...