考慮以下情況:
如果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
}
待補充其它細節