最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++內(nèi)存管理詳解使用方式

 更新時間:2022年04月24日 15:46:38   作者:一起慢慢變強  
內(nèi)存管理是C++最令人切齒痛恨的問題,也是C++最有爭議的問題,C++高手從中獲得了更好的性能更大的自由,C++菜鳥的收獲則是一遍—遍的檢查代碼和對C++的痛恨,但內(nèi)存管理在C++中無處不在,內(nèi)存泄漏幾乎在每個C++程序中都會發(fā)生,要想成為C++高手,內(nèi)存管理這關(guān)是必須過的

c++中內(nèi)存管理的方式

在c語言中,我們擁有malloc和free等函數(shù)可以對內(nèi)存進行動態(tài)管理

但是總體來說不是很方便,所以c++擁有了一種新的方式來對內(nèi)存進行管理:通過new和delete操作符來對內(nèi)存進行動態(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)建出的對象進行初始化,也可以顯示的寫出想要被初始化的值,而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是用戶進行動態(tài)內(nèi)存申請和釋放的操作符

operator new 和operator delete是系統(tǒng)提供的全局函數(shù)

new在底層調(diào)用operator new全局函數(shù)來申請空間

delete在底層通過operator delete全局函數(shù)來釋放空間

最終還是通過malloc和free來進行動態(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ù)進行初始化

delete的原理

1、調(diào)用operator delete釋放空間

2、調(diào)用自定義類型的析構(gòu)函數(shù)進行初始化

所以我們使用c++的時候最好使用new和delete進行動態(tài)內(nèi)存開辟,因為這樣可以更方便進動態(tài)內(nèi)存管理,防止內(nèi)存泄露

到此這篇關(guān)于C++內(nèi)存管理詳解使用方式的文章就介紹到這了,更多相關(guān)C++內(nèi)存管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 循環(huán)隊列詳解及隊列的順序表示和實現(xiàn)

    循環(huán)隊列詳解及隊列的順序表示和實現(xiàn)

    這篇文章主要介紹了循環(huán)隊列詳解及隊列的順序表示和實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • OpenCV實現(xiàn)車牌字符分割(C++)

    OpenCV實現(xiàn)車牌字符分割(C++)

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)車牌字符分割,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 如何利用C++實現(xiàn)mysql數(shù)據(jù)庫的連接池詳解

    如何利用C++實現(xiàn)mysql數(shù)據(jù)庫的連接池詳解

    為了提高MySQL數(shù)據(jù)庫的訪問的瓶頸,除了在服務(wù)器端增設(shè)緩存服務(wù)器緩存常用的數(shù)據(jù)之外(如redis),還可以增加數(shù)據(jù)庫連接池,來提高MySQL Server的訪問效率,這篇文章主要給大家介紹了關(guān)于如何利用C++實現(xiàn)mysql數(shù)據(jù)庫的連接池的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • 解析C++中多層派生時的構(gòu)造函數(shù)及一些特殊形式

    解析C++中多層派生時的構(gòu)造函數(shù)及一些特殊形式

    這篇文章主要介紹了解析C++中多層派生時的構(gòu)造函數(shù)及一些特殊形式,特殊形式主要針對基類和子對象類型的構(gòu)造函數(shù)內(nèi)容,需要的朋友可以參考下
    2015-09-09
  • C++中register關(guān)鍵字舉例詳解

    C++中register關(guān)鍵字舉例詳解

    register用來聲明變量,然后聲明出來的變量是直接放在cpu的寄存器當中,而非就是通過內(nèi)存尋址訪問,這樣效率更高,下面這篇文章主要給大家介紹了關(guān)于C++中register關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • C++如何計算二進制數(shù)中1的個數(shù)

    C++如何計算二進制數(shù)中1的個數(shù)

    這篇文章主要介紹了C++如何計算二進制數(shù)中1的個數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 增加Vscode引用路徑的解決方法(2種)

    增加Vscode引用路徑的解決方法(2種)

    在嵌入式開發(fā)中需要經(jīng)常用到庫函數(shù), Vscode需要配置引用路徑,本文主要介紹了增加Vscode引用路徑的解決方法,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • C++ 之 Asio 庫(全面解析)

    C++ 之 Asio 庫(全面解析)

    下面小編就為大家?guī)硪黄狢++ 之 Asio 庫(全面解析)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 關(guān)于C++中構(gòu)造函數(shù)初始化成員列表的總結(jié)

    關(guān)于C++中構(gòu)造函數(shù)初始化成員列表的總結(jié)

    下面小編就為大家?guī)硪黄P(guān)于C++中構(gòu)造函數(shù)初始化成員列表的總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++中BitSet和Bloom_Filter的實現(xiàn)

    C++中BitSet和Bloom_Filter的實現(xiàn)

    本文主要介紹了C++中BitSet和Bloom_Filter的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02

最新評論

安庆市| 利津县| 信丰县| 临猗县| 洞口县| 宝丰县| 江达县| 成安县| 菏泽市| 万宁市| 谢通门县| 曲靖市| 吴江市| 青川县| 马龙县| 泾源县| 巨鹿县| 逊克县| 邵阳县| 南阳市| 浦东新区| 南安市| 河南省| 资溪县| 漠河县| 马鞍山市| 长丰县| 西青区| 长岭县| 台北市| 达日县| 湖南省| 长汀县| 观塘区| 江永县| 凌源市| 谢通门县| 乡城县| 文水县| 云南省| 得荣县|