raii

    3熱度

    3回答

    我的C#程序使用了一個COM組件,它有大量的各種接口和子對象。問題是每次我檢索一個COM接口RCW被創建並且RCW存在未知的時間(直到被GC收集)。每個RCW在COM服務器中保存一些對象。 COM組件是一個out-proc服務器,所以它的對象駐留在一個單獨的相當重的進程中,直到所有駐留在其中的對象都被釋放後纔會終止。我希望所有對象儘快釋放,以便我確切地知道,一旦我釋放了最後一個對象,out-pro

    3熱度

    4回答

    我正在試驗Python的with語句,我發現在下面的代碼清單中我的__init__方法被調用兩次,而我的__exit__方法被調用一次。這大概意味着如果這段代碼做了任何有用的工作,將會有資源泄漏。 class MyResource: def __enter__(self): print 'Entering MyResource' return MyResource

    13熱度

    4回答

    在析構函數中檢測到它是在堆棧展開期間運行的時候,由於引發了異常而不是觸發析構函數的範圍的正常退出,C++中的一個好方法是什麼?我想知道這樣我可以創建一個類,它有一些總是在正常退出時運行的清理代碼,但在發生異常時會跳過。

    0熱度

    1回答

    理論上可以爲.NET創建一個RAII-Wrapper嗎?作爲一個很長時間的C++程序員,我不想再次自己管理對象的生命週期。 Dispose-Pattern是恕我直言,不過是一個壞笑話,與RAII的易用性相比,尤其是因爲它迫使用戶處理一個對象的實現細節(Dispose),並將該類變爲IDisplosable本身...

    1熱度

    1回答

    因此,我已經聽到過有關現代C++風格的一個經驗法則,那就是不應該使用new或delete,而應該使用智能指針。所以當我有一個類,其中一個成員是指向另一個對象的指針時,如何去解決這個問題。通過使用智能指針,我可以避免需要刪除,但我仍然需要使用新建對象。例如。是下面的「典型」現代C++風格,還是應該怎麼做呢? #include #include class B { public:

    0熱度

    1回答

    我有一個程序負責讀取數據,格式化它並創建記錄,並將記錄輸出到文件。本次討論的重要的類是: RecordGenerator - 包含控制主流 (獲取數據,格式,輸出) 文件管理線程 - 管理輸出文件。記錄發送到這個 類,然後將它放入收費文件中。 OUTPUTFILE - 包含記錄的文件的抽象,具有 打印(),close()方法,等等。這些對象由FileManager 擁有在正常關機過程中,析構函數,

    5熱度

    3回答

    在C++中,我經常使用RAII風格的對象來使代碼更加可靠,並將它們分配到堆棧上以使代碼更具性能(並避免bad_alloc)。 但是在堆棧上創建一個具體類的對象違反了依賴倒置(DI)原則並且防止嘲笑這個對象。 考慮下面的代碼: struct IInputStream { virtual vector<BYTE> read(size_t n) = 0; }; class Connec

    12熱度

    3回答

    以相反的順序取消分配內存對變量有什麼優勢?

    3熱度

    2回答

    我正在尋找一種方法來確保在堆上執行的對象總是在我完成時釋放。 我知道,如果它被分配到堆棧上,我可以使用RAII來確保它會被照顧 - 不幸的是,這對我(至少是直接的)不起作用,因爲所討論的對象實際上是由調用一個api函數,然後它返回一個指向它在堆上創建的對象的指針。 所以,從概念上講,我想要做的是一樣的東西: TheApi::ApiObject* p_myObj = TheApi::createAn

    2熱度

    1回答

    是否有關於正式治療RAII和/或在C++中安全釋放的研究論文?