真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

智能指針是存儲(chǔ)指向動(dòng)態(tài)分配(堆)對(duì)象指針的類,確保離開(kāi)指針?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è)、軟件開(kāi)發(fā)、成都小程序開(kāi)發(fā)等企業(yè)互聯(lián)網(wǎng)相關(guān)業(yè)務(wù),是一家有著豐富的互聯(lián)網(wǎng)運(yùn)營(yíng)推廣經(jīng)驗(yàn)的科技公司,有著多年的網(wǎng)站建站經(jīng)驗(yàn),致力于幫助中小企業(yè)在互聯(lián)網(wǎng)讓打出自已的品牌和口碑,讓企業(yè)在互聯(lián)網(wǎng)上打開(kāi)一個(gè)面向全國(guó)乃至全球的業(yè)務(wù)窗口:建站咨詢電話:13518219792

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

1.共享智能指針shared_ptr

shared_ptr是個(gè)模板類,可以通過(guò)構(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è)共享智能指針(通過(guò)智能指針給智能指針賦值解決)

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

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

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

? 內(nèi)部引用計(jì)數(shù)為1,如另一個(gè)智能指針需要使用這塊對(duì)內(nèi)存,是需要使用move函數(shù)來(lái)轉(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

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

use_count:獲取shared_ptr內(nèi)的引用計(jì)數(shù)
	expired:判斷資源是否被釋放,true-釋放,false-沒(méi)有釋放
	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ù) = "<通過(guò)shared_from_this()方法來(lái)返回共享智能指針
	//shared_from_this函數(shù)內(nèi)部通過(guò)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ù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


文章題目:C++11特性-智能指針-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://weahome.cn/article/dghjso.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部