raii

    0熱度

    1回答

    我有一個C++程序,我需要爲日誌(char *)分配內存。 我讀了關於std::shared_ptr以及他們將如何處理一旦範圍被刪除的內存刪除。 下面的代碼會在範圍離開後自動釋放日誌緩衝區嗎? std::shared_ptr< char * > pLog = std::shared_ptr< char * > (new char[logLength+1]); 我知道這可能有點簡單,但

    1熱度

    3回答

    當我將主要看像 Object a; if (! a.initialize(x, y, z)) return EXIT_FAILURE; // 100 lines using a a.finalize(); 我試圖改變這部分代碼,並使用RAII idiome項目。 因此,我刪除了initialize函數和finalize並在構造函數和析構函數中移動了代碼。 爲了趕上init

    4熱度

    7回答

    Golang式defer的總體構思解釋爲here和here。 我想知道STL(C++ 11,C++ 14,...)或者Boost或者其他一些庫是否包含這樣的類的實現?所以我可以使用它,而不必在每個新項目中都重新實現它。

    2熱度

    2回答

    考慮下面的代碼: vector<uint8_t> v(1); v.reserve(2); uint8_t *data = &v.front(); data[1] = 0; 有未定義的行爲(C++ 98,C++ 03,C++ 11)? 如果是,什麼是獲得RAII緩衝區(不使用C++ 11)的最佳途徑?

    0熱度

    3回答

    當我嘗試使用mutex與RAII。 class MutexLock { public: MutexLock() { pthread_mutex_init(&mutex_, NULL); cout << "construct of MutexLock" << endl; } ~MutexLock() { cout << "deco

    8熱度

    1回答

    我想通過C套接字編寫一個簡單的小型C++ RAII封裝。 問題是什麼狀態是一個套接字被考慮初始化(從RAII的角度來看),因此符合發佈條件。 例如,對於TCP客戶端套接字:如果socket調用成功,但connect調用失敗,應該調用close? 這只是一個例子,我感興趣的是一個籠統的回答,是這樣的: 通過socket成功創建每個插座都必須關閉。 或 必須關閉每個connect,listen或acc

    1熱度

    3回答

    大多數時候我在代碼中看到的這種實施一個線程安全的getter方法的一些變種: class A { public: inline Resource getResource() const { Lock lock(m_mutex); return m_resource; } private: Resource m_resour

    0熱度

    1回答

    我有一個類似的代碼: std::unique_ptr<Object> get_raii_object() { return std::make_unique<Object>(/* Many parameters that I don't want to write several times, if I remove this function altogether */); }

    0熱度

    1回答

    我閱讀RAII原則,有關於它的一些問題。實際上,它封裝了資源。所以,請考慮類std::string。它有一個constructorstring (const char* s);。所以,就像智能​​指針(例如template explicit shared_ptr (U* p);)它需要一個指向資源的指針然後管理它。對於string s這麼說是否正確?

    0熱度

    3回答

    如何查看編譯器在C++中添加的代碼? 例如,我們知道 當某個類的對象超出了作用域時,該對象的析構函數被調用,但是如何查看執行析構函數調用的特定代碼?該代碼仍然是用C++編寫的嗎?