第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

解鎖即可觀(guān)看《物聯(lián)網(wǎng)/嵌入式工程師》完整課程視頻

物聯(lián)網(wǎng)/嵌入式工程師

重磅升級(jí):新增硬件電路設(shè)計(jì)與實(shí)戰(zhàn),讓你軟硬通吃,同級(jí)PK無(wú)敵!行業(yè)風(fēng)口、政策傾斜,新晉熱門(mén)高薪不內(nèi)卷!0基礎(chǔ)一站式就業(yè)完整路徑,搶占先發(fā)優(yōu)勢(shì)!

【第1周】邁進(jìn)供不應(yīng)求的物聯(lián)網(wǎng)/嵌入式行業(yè)大門(mén)
【第2周】C語(yǔ)言進(jìn)階-編程思想
【第3周】C語(yǔ)言高級(jí)進(jìn)階
【第4周】C語(yǔ)言項(xiàng)目實(shí)戰(zhàn)與《階段筆試》
【第5周】數(shù)據(jù)結(jié)構(gòu)-線(xiàn)性結(jié)構(gòu)、非線(xiàn)性結(jié)構(gòu)等
【第6周】排序與復(fù)雜度&數(shù)據(jù)結(jié)構(gòu)項(xiàng)目實(shí)戰(zhàn)
【第7周】Shell編程和Makefile工程管理
【第8周】Linux文件IO和標(biāo)準(zhǔn)IO
【第9周】Linux下文件操作項(xiàng)目實(shí)踐與階段評(píng)測(cè)
【第10周】Linux 多進(jìn)程、多線(xiàn)程、IO模型
【第11周】Linux 項(xiàng)目實(shí)戰(zhàn)-實(shí)現(xiàn)并發(fā)服務(wù)器模型與企業(yè)筆試
【第12周】網(wǎng)絡(luò)基礎(chǔ)和UDP Socket編程
【第13周】TCP Socket編程和WireShark抓包分析
【第14周】網(wǎng)絡(luò)編程項(xiàng)目實(shí)戰(zhàn)-網(wǎng)絡(luò)視頻監(jiān)控與企業(yè)筆試
【第15周】從C到C++
【第16周】軟件設(shè)計(jì)模式與C++11新特性
【第17周】項(xiàng)目實(shí)戰(zhàn)-C++語(yǔ)言實(shí)現(xiàn)五子棋游戲與企業(yè)筆試
【第18周】嵌入式產(chǎn)品人機(jī)交互必備-QT框架
【第19周】項(xiàng)目實(shí)戰(zhàn)-QT開(kāi)發(fā)音樂(lè)播放器
【第20周】智能硬件開(kāi)發(fā)-ARM核介紹和基礎(chǔ)外設(shè)
【第21周】智能硬件開(kāi)發(fā)-單片機(jī)常用外設(shè)
【第22周】stm32芯片-智能硬件項(xiàng)目實(shí)戰(zhàn)與企業(yè)筆試
【第23周】大廠(chǎng)必備- linux內(nèi)核與文件系統(tǒng)移植
【第24周】嵌入式開(kāi)發(fā)-系統(tǒng)移植-bootloader、yocto
【第25周】嵌入式底層核心技能-Linux設(shè)備驅(qū)動(dòng)初級(jí)
【第26周】嵌入式底層核心技能-Linux設(shè)備驅(qū)動(dòng)中級(jí)
【第27周】嵌入式底層核心技能-Linux設(shè)備驅(qū)動(dòng)高級(jí)1
【第28周】嵌入式底層核心技能-Linux設(shè)備驅(qū)動(dòng)高級(jí)2
【第29周】智能家居項(xiàng)目實(shí)戰(zhàn)之Linux智能網(wǎng)關(guān)端開(kāi)發(fā)
【第30周】智能家居項(xiàng)目實(shí)戰(zhàn)之STM32單片機(jī)設(shè)備端開(kāi)發(fā)
【第31周】人臉指紋識(shí)別考勤機(jī)設(shè)計(jì)與實(shí)戰(zhàn)
【第32周】硬件電路設(shè)計(jì)-電路基礎(chǔ)知識(shí)
【第33周】STM32最小系統(tǒng) - 硬件電路設(shè)計(jì)實(shí)戰(zhàn)項(xiàng)目(一)
【第34周】CAN總線(xiàn)分析儀 - 硬件電路設(shè)計(jì)實(shí)戰(zhàn)項(xiàng)目(二)
【第35周】4路輸入輸出控制器 - 硬件電路設(shè)計(jì)實(shí)戰(zhàn)項(xiàng)目(三)
【第36周】8路邏輯分析儀 - 硬件電路設(shè)計(jì)實(shí)戰(zhàn)項(xiàng)目(四)
【第37周】項(xiàng)目答辯和就業(yè)指導(dǎo)&獨(dú)立開(kāi)發(fā)階段-三大熱門(mén)領(lǐng)域項(xiàng)目
章節(jié)
問(wèn)答
課簽
筆記
評(píng)論
占位
占位

指針是聰明的:智能指針

在之前的課程中,我們講過(guò)使用 new 關(guān)鍵字將一個(gè)對(duì)象分配到堆上,分配到堆上的對(duì)象必須手動(dòng) delete 掉,否則就會(huì)造成內(nèi)存泄漏的問(wèn)題。我們常常因?yàn)橥涐尫艃?nèi)存,或者釋放內(nèi)存的時(shí)機(jī)不對(duì)而出現(xiàn)問(wèn)題。

為了可以讓指針自行釋放,在 C++11 標(biāo)準(zhǔn)中,加入了一種可以自行釋放的指針,叫做智能指針。

unique_ptr

我們首先來(lái)介紹第一種智能指針:std::unique_ptr。

std::unique_ptr 用于不能被多個(gè)實(shí)例共享的內(nèi)存管理。它將普通的指針?lè)庋b為一個(gè)棧對(duì)象,我們之前學(xué)過(guò)棧對(duì)象的生命周期,當(dāng)棧對(duì)象的生存周期結(jié)束后,會(huì)在析構(gòu)函數(shù)中釋放掉申請(qǐng)的內(nèi)存,從而防止內(nèi)存泄漏。這就是說(shuō),僅有一個(gè)實(shí)例擁有內(nèi)存所有權(quán)。我們可以通過(guò)一個(gè)實(shí)例來(lái)看一下

#include <memory>

class A{
public:
    A()
    {

    }

    ~A()
    {

    }
};


int main(int argc,char **argv)
{
    std::unique_ptr<A> p1(new A());

    return 0;
}

在上面的代碼中,我們初始化了一個(gè)智能指針,指向了一片 A 對(duì)象的內(nèi)存。要注意的是 unique_ptr 只能通過(guò)構(gòu)造函數(shù)將指針傳入,而不能將一個(gè)指針直接進(jìn)行賦值。也就是說(shuō),這句話(huà)不能寫(xiě)成:

std::unique_ptr<A> p1 = new A(); // 會(huì)報(bào)錯(cuò)

在初始化之后,就可以像普通指針那樣操作這個(gè)智能指針,不一樣的是,在使用完之后,不用去 delete 他,他會(huì)自動(dòng)釋放內(nèi)存。

值得注意的是,unique_ptr 只能在初始化的時(shí)候指向一片內(nèi)存,之后他就不能被別人重新賦值,也不能賦值給其他指針,這是一個(gè)孤獨(dú)的智能指針。

shared_ptr

想讓指針不那么孤獨(dú),我們可以使用 shared_ptr。

std::shared_ptr 與 std::unique_ptr 的主要區(qū)別在于前者是使用引用計(jì)數(shù)的智能指針。引用計(jì)數(shù)的智能指針可以跟蹤引用同一個(gè)真實(shí)指針對(duì)象的智能指針實(shí)例的數(shù)目。在這種智能指針中,有一個(gè)整型變量,被稱(chēng)之為引用計(jì)數(shù)變量。當(dāng)這個(gè)指針發(fā)生賦值到其他指針的操作的時(shí)候,說(shuō)明這個(gè)智能指針指向的對(duì)象被別人“分享”了一次,則引用計(jì)數(shù)加1;而當(dāng)一個(gè)智能指針被銷(xiāo)毀,就是這個(gè)智能指針的析構(gòu)函數(shù)被調(diào)用的時(shí)候,說(shuō)明有一個(gè)人對(duì)其放棄了“分享”,則引用計(jì)數(shù)減1,當(dāng)引用計(jì)數(shù)變成 0 的時(shí)候,說(shuō)明這個(gè)對(duì)象將不被任何指針指向,這時(shí)候,就可以銷(xiāo)毀這個(gè)對(duì)象了。

shared_ptr 的用法如下:

int main(int argc,char **argv)
{
    std::shared_ptr<A> p1 = std::make_shared<A>();
    std::shared_ptr<A> p2 = p1;

    return 0;
}

在上述例子中 p1 和 p2 指向了同一片內(nèi)存,兩個(gè)指針都能操作這片內(nèi)存,而且還不用釋放。

值得注意的是,上面的例子中,我們沒(méi)有使用 new ,而是使用了 make_shared 來(lái)構(gòu)建對(duì)象。make_shared 可以保留指針的關(guān)系,避免錯(cuò)誤發(fā)生,也是 shared_ptr 推薦的方式。

weak_ptr

std::shared_ptr 看起來(lái)能解決絕大多數(shù)的問(wèn)題,但是,std::shared_ptr 在有一個(gè)場(chǎng)景下會(huì)發(fā)生錯(cuò)誤,那就是循環(huán)引用。

我們來(lái)看這樣一個(gè)程序

class A{
public:
    A()
    {
        printf("A()\n");
    }

    ~A()
    {
        printf("~A()\n");
    }

    int aaa(){
        return 0;
    }

    std::shared_ptr<A> a;
};

int main(int argc,char **argv)
{
    std::shared_ptr<A> p1 = std::make_shared<A>();
    std::shared_ptr<A> p2 = std::make_shared<A>();

    p1->a = p2;
    p2->a = p1;

    return 0;
}

在這個(gè)程序中,我們給 A 類(lèi)也添加了兩個(gè)智能指針的成員變量。然后在 main 函數(shù)中,讓他們相互引用。正常來(lái)說(shuō),我們 make_shared 了兩次,應(yīng)該調(diào)用了兩次 A 的構(gòu)造函數(shù),之后又會(huì)調(diào)用兩次 A 的析構(gòu)函數(shù)。但是運(yùn)行這個(gè)程序,就會(huì)發(fā)現(xiàn),沒(méi)有析構(gòu)函數(shù)被調(diào)用,也就是說(shuō),兩個(gè)指針都沒(méi)有被銷(xiāo)毀。這是因?yàn)?p1 和 p2 是一個(gè)相互引用的狀態(tài),這種相互引用的狀態(tài)會(huì)導(dǎo)致一種“死鎖”現(xiàn)象的產(chǎn)生,最終導(dǎo)致兩者都無(wú)法釋放。

為了解決這個(gè)問(wèn)題,C++ 提供了 weak_ptr。在相互引用的時(shí)候,使用 weak_ptr 就可以防止死鎖。

class A{
public:
    A()
    {
        printf("A()\n");
    }

    ~A()
    {
        printf("~A()\n");
    }

    int aaa(){
        return 0;
    }

    std::weak_ptr<A> a;
};

任務(wù)

?不會(huì)了怎么辦
||

提問(wèn)題

寫(xiě)筆記

公開(kāi)筆記
提交
||

請(qǐng)驗(yàn)證,完成請(qǐng)求

由于請(qǐng)求次數(shù)過(guò)多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求

加群二維碼

打開(kāi)微信掃碼自動(dòng)綁定

您還未綁定服務(wù)號(hào)

綁定后可得到

  • · 粉絲專(zhuān)屬優(yōu)惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問(wèn)題答復(fù)提醒
  • · 賬號(hào)支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書(shū)簽

邀請(qǐng)您關(guān)注公眾號(hào)
關(guān)注后,及時(shí)獲悉本課程動(dòng)態(tài)

舉報(bào)

0/150
提交
取消
全部 精華 我要發(fā)布
全部 我要發(fā)布
最熱 最新
只看我的

手記推薦

更多

本次提問(wèn)將花費(fèi)2個(gè)積分

你的積分不足,無(wú)法發(fā)表

為什么扣積分?

本次提問(wèn)將花費(fèi)2個(gè)積分

繼續(xù)發(fā)表請(qǐng)點(diǎn)擊 "確定"

為什么扣積分?