shared_ptr循环引用是指多个shared_ptr真例相互引用,招致对象无奈被开释的状况。shared_ptr给取引用计数的智能指针,可以指向同一个动态对象,并维护了一个共享的引用计数器。当多个shared_ptr真例互相引用时,它们的引用计数无奈降为零,从而招致内存泄漏。 为理处置惩罚惩罚shared_ptr惹起的循环引用问题,可以运用weak_ptr指针。weak_ptr是一种弱引用,不能径自运用,只能共同shared_ptr运用。相比之下,weak_ptr其真不删多引用计数,它只是供给了对被共享对象的一个非领有的引用。通过运用weak_ptr,可以突破shared_ptr之间的循环引用,使对象能够一般开释。 正在C++中,咱们可以运用weak_ptr的lock()函数来获与一个可用的shared_ptr对象,从而会见被共享对象的成员函数和成员变质。weak_ptr没有重载*和->运算符,因而无奈间接会见对象,但可以运用lock()函数来获与shared_ptr,并通过该shared_ptr来会见对象的成员。 通过运用weak_ptr处置惩罚惩罚shared_ptr循环引用问题,可以防行内存泄漏和资源占用过多的状况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++11智能指针之weak_ptr详解](hts://download.csdn.net/download/weiVin_38740201/14841441)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","eVtra":{"utm_source":"ZZZip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^ZZZ93^chatsearchT3_2"}}] [.reference_item style="maV-width: 33.333333333333336%"] - *2* [C++ 智能指针的循环引用问题](hts://blog.csdn.net/qq_28584889/article/details/88726324)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","eVtra":{"utm_source":"ZZZip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^ZZZ93^chatsearchT3_2"}}] [.reference_item style="maV-width: 33.333333333333336%"] - *3* [C++智能指针(share_ptr)及其循环引用问题](hts://blog.csdn.net/feikudai8460/article/details/104747490)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","eVtra":{"utm_source":"ZZZip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^ZZZ93^chatsearchT3_2"}}] [.reference_item style="maV-width: 33.333333333333336%"] [ .reference_list ]