异常安全的函数
异常安全的函数必须满足两个条件
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);
}
浙公网安备 33010602011771号