std shared ptr owner before到底做什麼用的,判斷是否共享同一物件嗎?

時間 2021-06-05 12:54:50

1樓:熙熙Persie

@陳碩 大大其實說的很準確了,例子也很精闢,我再來稍微解釋一下。

文件中有:

The stored pointer (i.e., the pointer the shared_ptr object dereferences to) may not be the owned pointer (i.

e., the pointer deleted on object destruction) if the shared_ptr object is an alias (alias-constructed objects and their copies).這其實說的是這樣一種場景,乙個智慧型指標有可能指向了另乙個智慧型指標中的某一部分,但又要保證這兩個智慧型指標銷毀時,只對那個被指的物件完整地析構一次,而不是兩個指標分別析構一次。

這種場景可以是 @陳碩 給出的基類指標指向派生類物件的情況,也可以是文件中的alias-constructed objects 的情況。

在這種情況下,指標就可以分為兩種,一種是 stored pointer 它是指標本身的型別所表示的物件(可能是乙個大物件中的一部分);另一種是 owned pointer 指向記憶體中的實際完整物件(這乙個物件可能被許多智慧型指標指向了它裡面的不同部分,但最終只析構一次)。owner-based order 就是指後一種情況,如果記憶體中只有乙個物件,然後被許多 shared pointer 指向了其中不同的部分,那麼這些指標本身的位址肯定是不同的,也就是operator<()可以比較它們,並且它們都不是物件的 owner,它們銷毀時不會析構物件。但它們都指向了乙個物件,在owner-based order 意義下它們是相等的。

2樓:陳碩

用來排序的。

比如用作map的key。

strict weak order 是乙個術語,指滿足傳遞性、反自反性、anti-對稱性的二元關係。你可以理解為「小於」。

而且文件已經清楚的解釋了與 operator<() 的區別。

class

BaseA

;class

BaseB

;class

Derived

:public

BaseA

,public

BaseB

{};int

main()

消泡劑是做什麼用的?

生物藥生產過程中,在進行細胞培養時,經常會遇到泡沫的煩惱,易導致液泛跑料,不得不降低裝罐係數,降低或中停通氣攪拌,使得發酵效率和產能受到比較大的影響。而加入少量的消泡劑,可有效消除泡沫,並抑制泡沫的產生,從而提高了產能。消泡劑的加入為後續的生產過程中引入了新物質,鑑於國家對生物製藥工藝的監管越來越嚴...

咖啡碟是做什麼用的?

為了防止加了糖之後攪拌咖啡灑出來,有碟子就洗碟子就好了,不需要常去擦桌子和吧檯。當然還有個重要的因素就是為了好看和防滑,就跟你喝水杯子下面放個杯墊一樣,沒有也行,有了更好。我在家喝咖啡都是馬克杯喝的,嗯。 馮利波 其實類似的四川蓋碗茶也是分三大件的,也有乙個盤子托起來,這個盤子叫茶船。因為早期的桌子...

驅動到底是幹什麼用的?最重要是能做什麼?

秦小凡 一般應用程式是不直接跟硬體打交道的,這樣可以極大的降低開發難度和成本,而操作硬體的任務就交給了驅動。只有自己才最了解做出來的東西,自己才更了解如何去操作自己的硬體,於是硬體商生產的硬體往往還附帶這為其編寫的驅動。而應用程式的開發者就不需要考慮這些東西,你要做的就是直接呼叫而已 Tim Che...