條款29:爲“異常安全”而努力是值得的

考慮以下情況:

如果1,new失敗的話,不但互斥鎖mutex永遠無法釋放,而且會導致bgImage指向的內容無效,破壞了數據。

Mutex mutex; // for lock

void fun() {
    lock(&mutex);//取得互斥器
    bgImage = new Image();//1
    unlock(&mutex);//釋放互斥器
}
//如果1,new失敗的話會引發兩個問題

使用以下方法,其實是條款13和14主張的內容:對象資源管理,會自動釋放。Lock的構造函數回去拿到鎖,在析構函數中會去釋放。

Mutex mutex; // for lock

void fun() {
    Lock m1(&mutex);
    bgImage = new Image();//1
}

待補充其它細節

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章