有沒有一種只用於避免懸掛發生的智慧型指標?

時間 2021-06-02 04:29:38

1樓:dwing

C++很難實現這個. 因為物件被銷毀後,對應的記憶體也被釋放了,不能訪問,那如何知道是否被銷毀呢.

問題中提到的引用計數存哪呢, 普通指標也無法感知到這引用計數也就沒法在銷毀時修改引用計數啊.

我能想到的做法就是做個全域性的指標銷毀集合,銷毀某個指標時,把指標位址記到集合裡,然後這個智慧型指標每次訪問都要到集合裡去判斷是否存在,就能識別是否銷毀了. 但這種做法對效能影響太大了,而且這個集合還需要一些管理上的問題需要處理.

2樓:

我理解你這個指針對整個物件的生命週期沒有任何的控制權,僅僅能夠正確處理當指向的物件非法的情況。那麼`weak_ptr`就可以了

3樓:「已登出」

不是很明白你這樣做的目的是為了什麼,如果是擔心指標在傳遞的過程,不太方便確定在什麼地方銷毀,那麼使用std::shared_ptr就可以了。

4樓:GarfieldKwong

你的這個要求有點高。能夠滿足你的要求的是沒有。普通指標就是缺乏了引用計數的資料。要有引用計數就要有地方存著引用計數這個資料,而通常就有浸入式和非侵入式這兩種方法。

非侵入式的就是std::shared_ptr 這種。這種就需要通過一定要通過特定的方法來建立指標(std::

make_shared),然後全程用shared_ptr來訪問指標。並且不能把原始指標直接賦值給shared_ptr,不要會造成引用計數的出錯。

侵入式的就是有乙個共同基類,例如說Object。這個共同基類裡有個私有成員變數記著引用計數。這種的話就能做到把原始指標直接賦值給智慧型指標,因為這種情況,智慧型指標只能管理Object的派生類物件。

如果把非Object的派生類交給智慧型指標就無能為力了。

另外「當所指物件銷毀時它能識別到」,這個在c++中很難做到,只能夠是智慧型指標維護著引用計數,當智慧型指標銷毀時,發現這是引用計數為1,就把所管理著的原始指標銷毀。基本上上述的兩種智慧型指標都可以做到適當的時候對原始指標銷毀。

只用linux是一種什麼樣的體驗?

優點 1 簡潔美觀。對於我這種很重外觀的人來說,ubuntu介面確實很讚。堪比蘋果。2 確實可以學到不少東西。linux命令,shell程式設計,vim,嵌入式等等。3 linux更能讓你專心。幾乎沒有廣告。遊戲也較少。缺點 1 最大的缺點是office有木有!linux下的office連offic...

有沒有這樣一種感覺?

已登出 有是有過。比如說感覺某件事會發生,然後那件事就發生了。就比如類似我在一篇文章找乙個詞或者乙個字。我一直邊拉螢幕邊找,很奇怪的是,很多時候我並沒有用目光找到我要找的字或者詞語。但是我卻隱隱約約能感覺到我要找的字就在這,然後我就開始慢慢縮小範圍去找,然後就找到了,很神奇,無一例外都是這樣。然後你...

有沒有一種物質跟同一種物質反應在一種條件下表現出氧化性,另一種條件下表現出還原性?

河塗摞書 比如F2,與水反應,通常情況下可以置換出水中的氧。F的氧化性。2F2 2H2O 4HF O2 但是有人用氮氣稀釋F2後,緩慢的通過細冰表面後得到氟氧酸。HFO,性質極不穩定,具有強氧化性。至於同樣的物質,在不同的條件下,和不同物質反應表現出氧化或還原能力,是有很多的,比如SO2。氧化性還原...