簡體   English   中英

我是否正確理解了Scott Meyers關於std :: weak_ptr的例子?

[英]Did I understand correctly the point of Scott Meyers' example of std::weak_ptr?

Effective Modern C ++ (第136頁)使用以下示例來激勵std::weak_ptr 緩存被定義為無序映射,其中指向對象的弱指針作為值。 每當此緩存的客戶端(按鍵)請求一個對象時,將查找相應的弱指針並在其上調用lock() 如果生成的std::shared_ptr不為null ,則返回它。 否則,從外部數據庫重新加載對象,輸入到緩存中並返回std::shared_ptr

現在的問題是:有人可能認為可以在沒有std::weak_ptr情況下實現它,而是將強共享指針存儲為緩存值。 如果強指針的use_count()等於1,則表示所有客戶端的指針都已被銷毀。 這個例子的重點是使用std::weak_ptr允許我們通過實際刪除對象來節省內存嗎?

“這個例子的重點是使用std :: weak_ptr允許我們通過實際刪除對象來節省內存嗎?”

是。 否則,緩存將無限期地保留指向的資源。 如果單獨分配,控制塊所需的空間通常遠小於可能需要緩存的資源類型(例如紋理,網格數據,甚至是本地化字符串)。

雖然可以使用原子實現相同的功能並檢查引用計數為1,但這需要自定義句柄實現。 std::weak_ptrstd::shared_ptr使整個事情變得不那么原型化了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM