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

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

 更新時(shí)間:2022年04月24日 15:46:38   作者:一起慢慢變強(qiáng)  
內(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)存進(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)容,最好使用[]來修飾一下,因?yàn)殡m然對于內(nèi)置類型不會報(bào)錯,但是自定義類型會直接報(bào)錯

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)部實(shí)現(xiàn)

內(nèi)置類型

如果申請的是內(nèi)置類型的空間,new和malloc,delete和free基本類似,不同的地方是:new/delete申請和釋放的是單個元素的空間,new[]和delete[]申請的是連續(xù)空間,而且new在申請空間失敗時(shí)會拋異常,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++的時(shí)候最好使用new和delete進(jìn)行動態(tài)內(nèi)存開辟,因?yàn)檫@樣可以更方便進(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)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    在嵌入式開發(fā)中需要經(jīng)常用到庫函數(shù), Vscode需要配置引用路徑,本文主要介紹了增加Vscode引用路徑的解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    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的實(shí)現(xiàn)

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

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

最新評論

师宗县| 阳曲县| 宣威市| 卓资县| 乌鲁木齐县| 华亭县| 志丹县| 罗定市| 张家界市| 广东省| 晋州市| 凤凰县| 芦溪县| 公主岭市| 浦县| 桐柏县| 保康县| 射阳县| 丹巴县| 友谊县| 栾川县| 定兴县| 普定县| 砚山县| 沭阳县| 泰来县| 西乌珠穆沁旗| 威信县| 武胜县| 西乡县| 都匀市| 峨眉山市| 高陵县| 洪洞县| 山东| 顺义区| 固原市| 太仆寺旗| 林口县| 徐汇区| 富川|