草庐IT

UndoSomething

全部标签

c++ - 如何处理 RAII 的构造函数失败

我熟悉RAII的优点,但我最近在这样的代码中遇到了一个问题:classFoo{public:Foo(){DoSomething();...}~Foo(){UndoSomething();}}一切正常,除了构造函数...部分中的代码引发了异常,导致UndoSomething()从未被调用。有一些明显的方法可以解决该特定问题,例如将...包装在try/catchblock中,然后调用UndoSomething(),但是:这是重复的代码和b:try/catchblock是我尝试通过使用RAII技术避免的代码异味。而且,如果涉及多个Do/Undo对,代码可能会变得更糟,更容易出错,我们必须中途

c++ - 如何处理 RAII 的构造函数失败

我熟悉RAII的优点,但我最近在这样的代码中遇到了一个问题:classFoo{public:Foo(){DoSomething();...}~Foo(){UndoSomething();}}一切正常,除了构造函数...部分中的代码引发了异常,导致UndoSomething()从未被调用。有一些明显的方法可以解决该特定问题,例如将...包装在try/catchblock中,然后调用UndoSomething(),但是:这是重复的代码和b:try/catchblock是我尝试通过使用RAII技术避免的代码异味。而且,如果涉及多个Do/Undo对,代码可能会变得更糟,更容易出错,我们必须中途