exception-safety

    0熱度

    1回答

    MSDN和other places說uninitialized_copy提供了強有力的異常保證,但other C++引用don't。 這實際上是由C++保證的,還是不是?

    1熱度

    2回答

    我在寫一個簡單的內存競技場分配器,並面臨一個異常安全的小問題。情況是當你分配一個本身調用分配器的對象時。內存池的目標是一次分配一堆對象,然後在池被銷燬時全部刪除它們。 { MemoryArena m; std::string* ptr = m.Allocate<std::string>(); // use ptr whatever // Cleaned up

    0熱度

    7回答

    如何確保某個類的某個實例永遠不會爲空?有人告訴我使用Debug.Assert(),但通過這樣做,我只能確保代碼在調試模式下工作,而我想確保發行版中的is-never-null條件。 例如,在過去,我寫了這樣的代碼: public string MyString { get { if(instance1.property1.Equals("bla")) { re

    9熱度

    3回答

    我繼續讀那swap()操作,像這樣的例子: template<class T> void swap (T &a, T &b) { T temp (a); a = b; b = temp; } 是有問題的,當我們面對的是異常安全。 它有什麼問題? 此外,我們如何解決它?

    3熱度

    2回答

    鑑於Jon Kalb用於解決Cargill Widget示例的強大的異常安全代碼,是什麼阻止了編譯器重新組織操作,從而使代碼不具有強大的異常安全性? #include <algorithm> // std::swap template< typename T1, typename T2 > class Cargill_Widget { public: Cargill_Widge

    4熱度

    3回答

    我正在討論如何正確處理容器參數。 我們有一個函數,它在容器參數,並希望只返回裝滿容器什麼功能付諸它: class bar; void foo(std::vector<bar> &bars) { //do stuff that fills bars. //exceptions may be thrown. //we may also legally return

    20熱度

    1回答

    考慮以下幾點: std::vector<std::unique_ptr<int>> ptrsToInts; ptrsToInts.emplace_back(new int); 如果矢量發生重新分配,而失敗(投擲std::bad_alloc),我是「安全」或者我會泄漏一個int? C++ 11 23.3.6.5 [vector.modifiers]/1表示: 如果異常比由複製構造拋出其他,移動

    4熱度

    3回答

    編寫類(使用copy-and-swap idiom)時的一般指導原則是提供非拋出交換成員函數。 (Effective C++, 3rd edition, Item 25和其他資源) 但是,如果我不能提供nothrow保證,因爲我的課程使用不提供交換操作的第三方類成員? // Warning: Toy code !!! class NumberBuffer { public: ...

    1熱度

    2回答

    給定以下代碼:我們需要鎖定模型,然後啓動一個事務(這可能會拋出一個異常,因此我們必須確保鎖被釋放),然後執行某種類似獲取數據庫連接的操作(這可能會導致一個例外),然後做一些可能會拋出異常的事情,要求事務恢復。這是Java 6,所以我們沒有Java 7的好東西可用。 SomeClass someMethod() throws SomeException { acquireWriteLoc

    4熱度

    1回答

    我試圖找到一個在線參考來查看幾個std容器的異常安全。 在std::vector的情況下,它是否保持push_back調用之前的狀態?我會假定矢量的所有對象仍然有效(沒有調用析構函數)。在push_back拋出std::bad_alloc異常之後,std::vector提供了哪些保證?