条款29:为“异常安全”而努力是值得的

  • Post author:
  • Post category:其他


考虑以下情况:

如果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
}

待补充其它细节



版权声明:本文为u010173306原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。