无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Effective C++ 第二十八條 Avoid returning “handles” to object internal

2023-01-29 03:03 作者:九思519  | 我要投稿

避免返回 handles 指向?qū)ο髢?nèi)部成分

下面有一段代碼

我們?cè)谥暗膶W(xué)習(xí)中知道,以 by-reference 的方式傳遞用戶自定義類型效率總是比 by-value 高,所以這里函數(shù) value 采用 by- reference 的方式傳遞。但是也會(huì)導(dǎo)致一些問題。

我們?cè)诤瘮?shù)外部獲取了屬于 private 的 reference ,然后對(duì)其進(jìn)行修改,這樣我們就破壞了 test 的封裝性。所以為了避免封裝性降低,我們不能讓返回一個(gè) non-const 的 reference。

就算是這樣,也有可能導(dǎo)致其他錯(cuò)誤。

當(dāng)我們采用 by-value 的方式返回一個(gè) test 的時(shí)候,返回的結(jié)果是一個(gè)臨時(shí)變量 temp,在函數(shù) getATest 結(jié)束的時(shí)候,temp 就已經(jīng)被銷毀,但是 ptr 指向 temp.value(),指向一個(gè)被銷毀的臨時(shí)變量,也就會(huì)導(dǎo)致錯(cuò)誤。所以即使是返回 private 成員的 const reference ?也依舊會(huì)導(dǎo)致錯(cuò)誤。這種情況稱為 虛吊(dangling handles)。

handles 包括引用、指針和迭代器。在寫一個(gè)類的時(shí)候,盡量不要返回指向內(nèi)部部分的 handles,內(nèi)部成分不僅包括 private/protected 修飾的成員變量還有成員函數(shù)。但這不是絕對(duì),有時(shí)候難以避免。比如 string 的 operator [],對(duì)于這種難以避免返回指向內(nèi)部的 handles。

總結(jié):

避免返回指向內(nèi)部成分的 handles,遵守這一點(diǎn)即可增強(qiáng)封裝性,幫助 const 成員函數(shù)的行為像一個(gè) const,并將發(fā)生 “dangling handles” 的可能性降低。


Effective C++ 第二十八條 Avoid returning “handles” to object internal的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
策勒县| 贵港市| 布尔津县| 昔阳县| 石城县| 饶河县| 兰州市| 博爱县| 瑞昌市| 清河县| 阿巴嘎旗| 澎湖县| 中宁县| 扎兰屯市| 北京市| 甘孜县| 本溪市| 星座| 崇文区| 九台市| 苍山县| 遵化市| 财经| 甘泉县| 铁岭市| 黄山市| 镇坪县| 阿拉善左旗| 拉萨市| 金阳县| 疏勒县| 丰顺县| 塔城市| 靖州| 铜鼓县| 广饶县| 桓仁| 自治县| 九江市| 海伦市| 三都|