raii

    2熱度

    5回答

    只是一個簡單的問題: ,如果我有一個簡單的載體類: class Vector { public: float x; float y; float z; }; 犯規的RAII的概念應用在這裏呢?即提供一個構造函數將所有值初始化爲某些值(以防止使用未初始化的值)。 編輯或提供一個構造函數,明確要求用戶在實例化對象之前初始化成員變量。 即 class Vector

    1熱度

    3回答

    我在OpenCV庫中使用C++,這是一個庫圖像處理,雖然這與此問題無關。目前我有一個設計決定。 OpenCV是一個C庫,它的數據結構(如CvMat)聲明爲結構體。爲了創建它們,你使用像cvCreateMat這樣的函數,並且釋放它們,你可以使用像cvReleaseMat這樣的函數。作爲一名C++程序員,我創建了一個特殊的cv_scoped類,它會在超出範圍時自動調用cvReleaseMat(如boo

    5熱度

    3回答

    我剛剛閱讀了關於控制反轉(IOC)的內容,它讓我感到困擾,它似乎讓內存管理變得很痛苦。當然,ioc似乎主要用於垃圾收集環境(Net,Java,Scripting),而我的擔心是在非gc設置中。 我在這裏擔心的是IOC在某種程度上違背了RAII,因爲我們將資源壽命與對象壽命分開。這是否增加了複雜性打擾其他人?真正的問題是什麼技術可以使事情順利進行?

    9熱度

    4回答

    我最近發佈了一個關於RAII的常見問題SO。 但是,我的HANDLE示例仍然存在一些實現問題。 A HANDLE被鍵入void *的windows.h。因此,正確的shared_ptr定義需要是 std::tr1::shared_ptr<void> myHandle (INVALID_HANDLE_VALUE, CloseHandle); 實施例1CreateToolhelp32Snapsho

    3熱度

    4回答

    我試圖建立一個非常簡約的內存讀取庫來讀取它的一些unsigned int。但是,當ReadUnsignedInt方法想要返回時,我遇到了「HEAP CORRUPTION DETECTED」錯誤消息。 堆損壞檢測。 CRT檢測到應用程序在緩衝區結束後寫入內存。 正如我所看到的,這可能是因爲當試圖刪除一些東西時。這可能是由於一些不正確的使用std::tr1::shared_ptr引起的,但我無法確定我

    6熱度

    6回答

    了Bjarne Stroustrup的寫在他的C++ Style and Technique FAQ,重點煤礦: 因爲C++支持的替代方案,是幾乎總是更好: 「資源採集是初始化」 技術(TC++ PL3節14.4)。其基本思想是通過本地對象表示資源,以便本地對象的析構函數釋放資源。這樣,程序員就不會忘記釋放資源。例如: class File_handle { FILE* p; publ

    20熱度

    10回答

    在C#中,如果我想確定性地清理非管理資源,我可以使用「using」關鍵字。但對於多依賴的對象,這最終越走越築巢: using (FileStream fs = new FileStream("c:\file.txt", FileMode.Open)) { using (BufferedStream bs = new BufferedStream(fs)) { us

    8熱度

    4回答

    爲什麼下面的代碼打印「xxY」?本地變量是否應該存在於整個函數的範圍之內?我可以使用這種行爲嗎?或者這將在未來的C++標準中改變? 我認爲根據C++標準3.3.2「在一個塊中聲明的名稱是局部的塊,其電勢範圍起始於它的點聲明的,並且在其聲明區域的結尾處結束。」 #include <iostream> using namespace std; class MyClass { public: