条款29:为”异常安全“而努力是值得的
异常安全的两个条件
void PrettyMenu::changeBackground(std::istream& imgSrc) {
lock(&mutex);
delete bgImage;
++imageChanges;
bgImage = new Image(imgSrc);
unlock(&mutex);
}class PrettyMenu {
...
std::tr2::shared_ptr<Image> bgImage;
...
};
void PrettyMenu::changeBackground(std::istream& imgSrc) {
Lock m1(&mutex); // 使用资源管理类管理锁
bgImage.reset(new Image(imgSrc); // 智能指针
++imageChanges;
}异常安全的三个保证等级
copy and swap
Last updated