【 GeekBand 第四周筆記與拓展】

本周的課程涉及的知識點(diǎn)非常繁雜多變 這里我挑選出幾個我認(rèn)為值得自己以及大家注意和值得深究的地方:

【pointer - like classes】

課程中 侯捷老師運(yùn)用了 智能指針 與 迭代器 兩個經(jīng)典的例子 給我們闡釋了pointer - like class,
按我的理解 智能指針就是在class的data中包含了一個指針 并且這個指針可以指向任何想要指向的object
從而達(dá)到了指針的作用
因此 若想要達(dá)到指針的作用 就必須要重寫操作符*與&

*注意點(diǎn):箭頭符號->的特殊行為:作用下去得到的結(jié)果,箭頭符號會繼續(xù)作用在得到的東西上

引申:侯捷老師只是粗略地介紹了定義與用法 在課程中 老師提出了一個問題:
為何讓class像一個指針or像一個函數(shù)呢?其目的何在?

這里通過查閱相關(guān)資料 我總結(jié)如下:
智能指針在面對異常的時候格外有用,因為他們能夠確保正確的銷毀動態(tài)分配的對象。他們也可以用于跟蹤被多用戶共享的動態(tài)分配對象。

這也就是智能指針最有用的地方 因為如果是類的對象 則會自動的調(diào)用析構(gòu)函數(shù)來用以銷毀對象 而不用手動銷毀 確保了內(nèi)存泄漏

【 reference 】

在本周末尾 侯捷老師講解了引用& 其實reference by pointer 指的即是指針 又是引用
而引用 是一種漂亮的指針 其本質(zhì)意義上 就是指針
只不過使用引用的寫法 相較于指針 會更加簡潔 明確

引申: 那么如果指針和引用聯(lián)系在一起 又會產(chǎn)生什么結(jié)果呢?

1). ** 指針的指針
2). *&指針的引用

二者其實都是指針 指針的指針其實是一個指向了指針的指針 其中存儲了指向指針的地址

這里我列舉出一個我在網(wǎng)上查找到的非常簡潔明了的資料圖來說明指針的指針:

Paste_Image.png
Paste_Image.png

指針的引用,指針?biāo)彩且粋€變量,*&就和普通變量的引用一樣,也可以理解為指針變量的別名。
而指針的引用 相當(dāng)于傳遞了其他指針變量的地址 這樣一來 指針的數(shù)值就可以人為的發(fā)生改變 而指針本身的數(shù)值(指針本身的地址)是不允許發(fā)生改變的

例如:

fun(int * pA); // pA的數(shù)值在函數(shù)返回后不會變化
fun(int*& pA); // pA的數(shù)值在函數(shù)返回可能會發(fā)生變化,如果fun函數(shù)內(nèi)部對pA賦值的話

void InitStack(LNode* & HS)
{
HS = NULL; // 函數(shù)返回后, HS就是NULL了
}

void InitStack(LNode* HS)
{
HS = NULL; // 函數(shù)返回后, HS依然是傳遞進(jìn)來的數(shù)值
}
*/

另外一篇文章有兩個例子 分別給了指針的指針和指針的引用:
https://www.canadapost.ca/cpotools/apps/track/personal/findByTrackNumber?trackingNumber=2006603813774502&LOCALE=en&LOCALE2=en.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容