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。
將類的建構函式,拷貝構造宣告成私有。防止別人呼叫拷貝在棧上生成物件。提供乙個靜態的成員函式,該靜態成員函式完成堆物件的建立。
classheaponly
private
: heaponly(){}
//c++98
//1.只宣告,不實現。因為實現可能會很麻煩,而你本身不需要
//2.宣告成私有
heaponly(const heaponly&);
//or
//c++11
heaponly(const heaponly&) = delete;
};
只能在棧上建立物件,即不能在堆上建立,因此只要將new的功能遮蔽掉即可,即遮蔽掉operator new和定位new表示式,注意:遮蔽了operator new,實際也將定位new遮蔽掉
classstackonly
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 移動開發工程師,甚至是產品...