中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

C++11特性-智能指針-創(chuàng)新互聯(lián)

智能指針是存儲(chǔ)指向動(dòng)態(tài)分配(堆)對(duì)象指針的類,確保離開指針?biāo)诘淖饔糜驎r(shí),自動(dòng)銷毀動(dòng)態(tài)分配的對(duì)象,防止內(nèi)存泄漏。智能指針實(shí)現(xiàn)的核心技術(shù)是引用計(jì)數(shù),每使用一次,內(nèi)部引用計(jì)數(shù)加1,每析構(gòu)一次內(nèi)部引用計(jì)數(shù)減1,減為0時(shí),刪除所指向的堆內(nèi)存。

創(chuàng)新互聯(lián)是一家以網(wǎng)絡(luò)技術(shù)公司,為中小企業(yè)提供網(wǎng)站維護(hù)、網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站備案、服務(wù)器租用、域名注冊(cè)、軟件開發(fā)、成都小程序開發(fā)等企業(yè)互聯(lián)網(wǎng)相關(guān)業(yè)務(wù),是一家有著豐富的互聯(lián)網(wǎng)運(yùn)營推廣經(jīng)驗(yàn)的科技公司,有著多年的網(wǎng)站建站經(jīng)驗(yàn),致力于幫助中小企業(yè)在互聯(lián)網(wǎng)讓打出自已的品牌和口碑,讓企業(yè)在互聯(lián)網(wǎng)上打開一個(gè)面向全國乃至全球的業(yè)務(wù)窗口:建站咨詢電話:13518219792

? 智能指針使用需要包含頭文件

1.共享智能指針shared_ptr

shared_ptr是個(gè)模板類,可以通過構(gòu)造函數(shù)、reset、shared_ptr輔助函數(shù)初始化

use_count查看引用計(jì)數(shù)、get方法獲取原始指針

//構(gòu)造函數(shù)初始化
	//shared_ptr智能指針名字 (創(chuàng)建堆內(nèi)存);//構(gòu)造函數(shù)初始化
// 拷貝、移動(dòng)構(gòu)造函數(shù)初始化

// make_shared初始化
	//template// shared_ptrmake_shared(Args .... args)
//reset構(gòu)造函數(shù)初始化
	//void reset() noexcept;

	//template//void reset(Y *ptr);

	//template//void reset(Y* ptr, Deleter d);

	//template//void reset(Y* ptr, Deleter d,Alloc alloc);
//prt指向要獲取所有權(quán)的對(duì)象指針,d指向要獲取所有權(quán)的對(duì)象指針,alloc內(nèi)部存儲(chǔ)器所用的分配器
//獲取原始指針
	//T *get() const noexcept;
//構(gòu)造函數(shù)初始化
	shared_ptrptr1(new int(3));
	// 移動(dòng)構(gòu)造函數(shù)初始化
	shared_ptrptr2 = move(ptr1);
	// 拷貝構(gòu)造函數(shù)初始化
	shared_ptrptr3 = ptr2;
	// make_shared初始化
	shared_ptrptr4 = make_shared(4);
	shared_ptrptr5 = make_shared(4);
	shared_ptrptr6 = make_shared("hello,world");
	//reset構(gòu)造函數(shù)初始化
	ptr6.reset();
	ptr5.reset(new EPtr(99));
	
	//獲取原始指針使用
	EPtr* t = ptr5.get();
	t->set(1000);
	t->pritf();

	//智能指針使用
	ptr5->set(999);
	ptr5->pritf();
	cout<< endl;

智能指針刪除器

? 當(dāng)智能指針引用計(jì)數(shù)為0時(shí),會(huì)自動(dòng)釋放內(nèi)存。也可以指定在初始化智能指針時(shí)指定刪除器函數(shù)(本質(zhì)為回調(diào)函數(shù)),一般為lambda表達(dá)式。管理數(shù)組的智能指針必須指定刪除器函數(shù)(也可以使用C++的srd::default_delete()函數(shù))

//shared_ptrppp2(new EPtr[3]);//只釋放一次
	//cout<< endl;

	shared_ptrppp3(new EPtr[3], [](EPtr* ptr) {
		cout<< "數(shù)組必須指定刪除器函數(shù) -----------------"<< endl;
		delete[] ptr;
		});
	cout<< endl;

	shared_ptrppp5(new EPtr[3],default_delete());
	std::cout<< endl;

	shared_ptrppp4(new int[3], default_delete());
	cout<< endl;

注意事項(xiàng):

? 不能使用一個(gè)地址初始化多個(gè)共享智能指針(通過智能指針給智能指針賦值解決)

? 函數(shù)不能管理返回this的共享智能指針對(duì)象(通過weak_ptr解決)

?????共享智能指針不能循環(huán)引用(通過weak_ptr解決)

2.獨(dú)占智能指針unique_ptr

? 內(nèi)部引用計(jì)數(shù)為1,如另一個(gè)智能指針需要使用這塊對(duì)內(nèi)存,是需要使用move函數(shù)來轉(zhuǎn)移

? 不允許將一個(gè)unique_ptr賦值給另一個(gè)unique_ptr

//構(gòu)造函數(shù)初始化
	unique_ptrptr1(new int(3));

	// 移動(dòng)構(gòu)造函數(shù)初始化
	unique_ptrptr2 = move(ptr1);
	
	//reset構(gòu)造函數(shù)初始化
	ptr2.reset();
	ptr2.reset(new int(99));

	//獲取原始指針使用
	unique_ptrptr3(new EPtr(4));
	EPtr* t = ptr3.get();
	t->set(100);
	t->pritf();

? 指定刪除器不一樣,需要在<>里面加入刪除器函數(shù)類型

using funPtr = void(*)(EPtr *);
	unique_ptrptr3(new EPtr("HELLO"), [](EPtr* t) {
		cout<< "test_unique_ptrDelete---------"<< endl;
		delete t; });

	//c11中unique_ptr能自動(dòng)申請(qǐng)與釋放數(shù)組地址
	unique_ptrptr4(new EPtr[3]);
	//c11中shared_ptr不支持下面方法,才c11后才支持
	shared_ptrptr5(new EPtr[3]);

3.弱引用之智能指針weak_ptr

? 不共享指針,不操作資源,來監(jiān)視shared_ptr(協(xié)調(diào)shared_ptr),主要解決返回this的shared_ptr與循環(huán)引用問題

use_count:獲取shared_ptr內(nèi)的引用計(jì)數(shù)
	expired:判斷資源是否被釋放,true-釋放,false-沒有釋放
	lock:獲取shared_ptr的資源對(duì)象
	reset:釋放,讓其不監(jiān)視shared_ptr的資源
class MyClassPtr :public enable_shared_from_this{
public:
	shared_ptrgetPtr() {
		//return shared_ptr(this);
		return shared_from_this();
	}

	~MyClassPtr() {
		cout<< "析構(gòu)"<ptr1 (objPtr);
	//不能使用一個(gè)地址初始化多個(gè)共享智能指針,會(huì)釋放多次
	//shared_ptrptr2(objPtr);//error
	shared_ptrptr2 = ptr1;

	shared_ptrsptr1(new MyClassPtr);
	cout<< "引用計(jì)數(shù) = "<通過shared_from_this()方法來返回共享智能指針
	//shared_from_this函數(shù)內(nèi)部通過weak_ptr的lock()返回shared_ptr對(duì)象
	shared_ptrsptr2 = sptr1->getPtr();
	cout<< "引用計(jì)數(shù) = "<< sptr2.use_count()<< endl;

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前名稱:C++11特性-智能指針-創(chuàng)新互聯(lián)
分享URL:http://www.rwnh.cn/article30/dghjso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、網(wǎng)站策劃動(dòng)態(tài)網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站改版靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)
临城县| 集安市| 佛冈县| 兴化市| 应城市| 莱西市| 华蓥市| 溆浦县| 宝鸡市| 彭泽县| 栾城县| 安陆市| 明星| 杭州市| 蕲春县| 鹰潭市| 同德县| 合山市| 巴塘县| 涿州市| 兴隆县| 台北县| 新民市| 兴仁县| 搜索| 田林县| 灵璧县| 开封县| 平原县| 依兰县| 长宁区| 高邑县| 阜新市| 津市市| 揭东县| 石林| 栾城县| 舟曲县| 靖宇县| 永顺县| 高雄市|