weak-ptr

    2熱度

    4回答

    從升壓:: shared_ptr的Boost文檔: 由於實現使用引用計數, shared_ptr實例週期不會被回收。例如,如果main() 將shared_ptr持有給A,而A直接或間接持有 shared_ptr返回給A,則A的使用計數將爲2.破壞 原始shared_ptr將使A掛起,使用計數爲1。使用 weak_ptr來「中斷循環」。 我不明白這一段,你能否提供一個這種情況的最小例子並解釋結果。

    4熱度

    4回答

    我在我的程序中遇到了一個設計問題。 我必須管理作爲根ChainDescriptor一部分的Nodes對象。 基本上它看起來如下: class ChainDescriptor { public: ~ChainDescriptor() { //delete the nodes in nodes... } void addNode(Node *)

    3熱度

    1回答

    我想爲我的項目創建這個MVC結構。我第一次使用shared_ptr和weak_ptr,並獲得了除循環依賴以外的許多問題。 模型是可觀察的。查看是觀察者。 class Observable { std::set< std::shared_ptr<Observer> > observers; public: Observable(void); void registe

    8熱度

    5回答

    我想將原始指針成員換成某個智能指針,以防止在開發類中刪除。指針下的對象的所有者在類之外。所以,看起來像boost::shared_ptr和std::auto_ptr不適合。以下是一個簡化示例: class Foo { boost::weak_ptr<Bar> m_bar; public: void setBar(const Bar *bar) { // bar created

    1熱度

    1回答

    STD表示: shared_ptr<T> lock() const noexcept; 返回: ​​ 但在之間過期返回false(對象仍然存在)和結構的shared_ptr另一個線程可以刪除最後一個強引用,從而拋出一個意外的異常?如何防止這種情況? 還是我錯過了什麼?

    4熱度

    1回答

    我是通過升壓日期時間庫here,其中含有大量的例子,如這一個閱讀: time_zone_ptr zone(new posix_time_zone("MST-07")); 我很好奇,爲什麼使用關鍵字「新」不會導致內存泄漏? 我調查了boost源代碼,並注意到它有兩個不同版本的構造函數,一個使用shared_ptr,另一個使用weak_ptr。有人可以解釋這些如何工作,以及爲什麼上面的行是安全的寫

    3熱度

    2回答

    我想了解一下如何(使用C++ 11,並希望與向後(升壓或TR1)兼容的智能指針類型)實現: 一個類的實例(ModelController)擁有一個資源(InputConsumer),而另一個組件(InputSender,在本例中是單身人士)可以訪問它。 該模型是InputSender持有引用InputConsumers,其中會有很多的列表。 ModelController可能沒有,一個或多個Inp

    3熱度

    1回答

    我缺少一些關於共享/弱指針構造被對象中刪除對於控制塊和對象本身)。當最後一個shared_ptr被破壞但是有weak_ptr -s剩下時會發生什麼?此時管理對象必須被釋放。但是如果make_shared分配的內存被釋放,那麼會使弱指針無效,因爲相同的釋放會破壞控制塊。

    3熱度

    1回答

    我有一個地圖,其中的值是一個弱指針。這工作: 雖然我可以這樣寫: for_each(IFoo::foo_wptr obj, objects | range::map_values) { IFoo::foo_ptr myObj = obj.lock(); if(myObj) myObj->notify(); } 我寧願有轉變爲鎖定共享指針新的範圍。類似這樣的: for_ea

    0熱度

    1回答

    那裏的專業人員, 這是我第一次向這個董事會發佈一個問題,這個問題在過去幫了我很多。我仍然是編程新手,並且在過去幾個月裏一直在努力學習很多關於編程軟件開發的知識。 我最近解決了「C++ 11-Smart Pointers」這個主題,並決定重寫前幾周我學到的所有設計模式,包括使用shared_ptr & weak_ptr進行資源管理的「Observer Pattern」。 當我試圖編寫一個簡單的觀察者