异常安全的函数

异常安全的函数必须满足两个条件

1)不泄露任何资源:当异常发生中断函数时,不会内存泄露,以及其他资源泄露(可以使用资源管理类处理泄露问题)

2)不允许数据破坏。

异常安全强烈保证函数可以使用copy and swap技术:对需要修改的对象做一个副本,然后在副本上做修改,修改后调用swap函数。缺点是为每个要修改的对象都提供副本,造成大量的效率和复杂度成本。

实现上:通常将隶属对象的数据从原对象放进另一个对象,然后富裕缘对象一个指针,指向那个所谓的实现对象,这种手法为pimpl idiostruct PMImpl

{
      std::tr1::shared_ptr<Imge> bgImage;
      int imageChages;
};

class prettyMenu
{
     .....
    void changeBackground(std::isteadm& imgSrc)
private:
      Muetex mutex;
      std::tr1::shared_ptr<PMImpl> pImpl;
}
 void PrettyMenu::changeBackground(std::istream& inmSrc)
{
       using std::swap;
       std::tr1::shared_ptr<PMImpl> pNew(new PMImpl(*pImpl));//获得副本
pNew->bgImage.reset(new Image(imgsrc));//在副本上修改值
++pNew->imageChanges;
swap(pImpl,pNew);
}

 

posted on 2015-11-26 00:13  菜鸟基地  阅读(159)  评论(0)    收藏  举报

导航