簡體   English   中英

為什么weak_ptr可以打破循環引用?

[英]why weak_ptr can break cyclic reference?

我學習了很多關於使用share_ptr來破壞循環引用的weak_ptr。 它是如何工作的? 怎么用? 任何身體都可以舉個例子嗎? 我完全迷失在這里。

還有一個問題,什么是強指針?

強指針保存對對象的強引用 - 意思是:只要指針存在,對象就不會被破壞。

對象不會單獨“知道”每個指針,只是它們的數字 - 這是強引用計數。

weak_ptr類“記住”對象,但不會阻止它被破壞。 你不能通過弱指針直接訪問對象,但你可以嘗試從弱指針創建一個強指針。 如果對象不再存在,則生成的強指針為空:

shared_ptr<int> sp(new int);
weak_ptr<int> wp(sp);

shared_ptr<int> stillThere(wp);
assert(stillThere);  // yes, the original object still exists, we can now use it
stillThere.reset();  // releasing the strong reference

sp.reset();          // here, the object gets destroyed, 
                     // because there's only one weak_ptr left

shared_ptr<int> notReally(wp);
assert(!notReally);  // the object is destroyed, 
                     // you can't get a strong pointer to it anymore

它不包含在引用計數中,因此即使存在弱指針也可以釋放資源。 使用weak_ptr時,從中獲取shared_ptr,暫時增加引用計數。 如果資源已被釋放,則獲取shared_ptr將失敗。

Q2:shared_ptr是一個強指針。 只要它們中的任何一個存在,就無法釋放資源。

暫無
暫無

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

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