[英]Use for applying weak_ptr to contents of unique_ptr
我正在嘗試理解c ++ 11中帶來的unique_ptr
, shared_ptr
和weak_ptr
。
我聽說weak_ptr
對於緩存,打破周期等等都很好。 我聽說他們與shared_ptrs
配合得很好。
但在這方面, shared_ptrs
和unique_ptrs
之間的區別是什么? 為什么weak_ptr
只能與一個而不是另一個一起使用? 為什么我不想對其他人擁有的東西進行弱引用?
從技術上講, weak_ptr
是一種掛起管理某個共享對象的一組shared_ptr
的引用計數器的方法。 當最后一個shared_ptr
被銷毀時,對象被銷毀,但只要有weak_ptr
,它的引用計數器就會存在。 因此,通過任何仍然存在的weak_ptr
您可以檢查對象是否仍然存在,或者是否已被銷毀。
如果它仍然存在,那么從weak_ptr
可以獲得一個允許您引用該對象的shared_ptr
。
這主要用於打破周期。
特別是,一個對象可以包含一個持有其自己的引用計數器的weak_ptr
,它允許您從對象本身獲取對象的shared_ptr
。 也就是說, shared_ptr
使用與該對象的其他shared_ptr
相同的引用計數器。 這就是enable_shared_from_this
工作原理。
unique_ptr
沒有任何引用計數器,因此掛起那個不存在的引用計數器是沒有意義的。
弱指針的主要觀點是你可以嘗試使指針變強,即擁有:
auto strongPtr = weakPtr.lock();
if (strongPtr)
{
// still existed, now have another reference to the resource
}
else
{
// didn't still exist
}
注意第一條路徑: 強弱指針要求我們取得對象的所有權 。
這就是使用unique_ptr
沒有意義的原因:使弱指針變強的唯一方法是從其他地方獲取資源,而對於unique_ptr
意味着將其留在其他地方並帶有意外的空指針。 shared_ptr
得到一個傳遞,因為它實際上意味着共享它。
我也是C ++ 11的新手,所以如果有人知道的話,我會很感激任何更正。
我認為沒有太多理由,否則,你會使用shared_ptr
因為它會unique_ptr
的整個目的。 unique_ptr
隱含了語義,它可以完全控制它指向的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.