C++內(nèi)存管理詳解使用方式
c++中內(nèi)存管理的方式
在c語言中,我們擁有malloc和free等函數(shù)可以對內(nèi)存進(jìn)行動態(tài)管理
但是總體來說不是很方便,所以c++擁有了一種新的方式來對內(nèi)存進(jìn)行管理:通過new和delete操作符來對內(nèi)存進(jìn)行動態(tài)分配
new和delete操作符的使用方式
new操作符的使用方式:
#include<iostream> using namespace std; class A {}; int main() { int* p = new int(2); //動態(tài)分配一個int類型的空間,還可以將它初始化 int* p1 = new int[10]; //動態(tài)分配一個數(shù)組 A* p2 = new A; //動態(tài)分配一個類 return 0; }
delete操作符的使用方式:
#include<iostream> using namespace std; class A {}; int main() { int* p = new int(2); int* p1 = new int[10]; A* p2 = new A; delete p; //銷毀p delete[] p1; //銷毀p1 delete p2; //銷毀p2 return 0; }
注意:
1、對于自定義類型,new和delete會自動調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)對創(chuàng)建出的對象進(jìn)行初始化,也可以顯示的寫出想要被初始化的值,而malloc和free不會
#include<iostream> using namespace std; class A { public: A(int x = 1) :_x(x) {} private: int _x; }; int main() { A* p = new A(2); //()括號內(nèi)為顯示的給對象初始化的值 return 0; }
2、假如要銷毀數(shù)組類的內(nèi)容,最好使用[]來修飾一下,因為雖然對于內(nèi)置類型不會報錯,但是自定義類型會直接報錯
operator new和operator delete函數(shù)
new和delete是用戶進(jìn)行動態(tài)內(nèi)存申請和釋放的操作符
operator new 和operator delete是系統(tǒng)提供的全局函數(shù)
new在底層調(diào)用operator new全局函數(shù)來申請空間
delete在底層通過operator delete全局函數(shù)來釋放空間
最終還是通過malloc和free來進(jìn)行動態(tài)內(nèi)存分配,不過和c不同的是,c++空間申請失敗,會出現(xiàn)拋異常的情況,而不是返回NULL
new和delete的原理內(nèi)部實現(xiàn)
內(nèi)置類型
如果申請的是內(nèi)置類型的空間,new和malloc,delete和free基本類似,不同的地方是:new/delete申請和釋放的是單個元素的空間,new[]和delete[]申請的是連續(xù)空間,而且new在申請空間失敗時會拋異常,malloc會返回NULL
自定義類型
如果是自定義類型,就有很大區(qū)別了
new的原理
1、調(diào)用operator new申請空間,
2、調(diào)用構(gòu)造自定義類型的構(gòu)造函數(shù)進(jìn)行初始化
delete的原理
1、調(diào)用operator delete釋放空間
2、調(diào)用自定義類型的析構(gòu)函數(shù)進(jìn)行初始化
所以我們使用c++的時候最好使用new和delete進(jìn)行動態(tài)內(nèi)存開辟,因為這樣可以更方便進(jìn)動態(tài)內(nèi)存管理,防止內(nèi)存泄露
到此這篇關(guān)于C++內(nèi)存管理詳解使用方式的文章就介紹到這了,更多相關(guān)C++內(nèi)存管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
判斷指定的進(jìn)程或程序是否存在方法小結(jié)(vc等)
VC判斷進(jìn)程是否存在?比如我想知道記事本是否運行,要用到哪些函數(shù)等實例,需要的朋友可以參考下2013-01-01C語言實現(xiàn) 數(shù)據(jù)類型占多少字節(jié)指針占多少字節(jié)
這篇文章主要介紹了 C語言 數(shù)據(jù)類型占多少字節(jié)指針占多少字節(jié)的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09