class Frobber
{
int m_NumberOfFrobs;
FrobManager m_FrobManager;
public:
void Frob()
{
m_NumberOfFrobs++;
m_FrobManager.HandleFrob(new FrobObject());
}
};
假设FrobManager will delete the FrobObject,这看起来不错,对吧?或者也许不是……想象一下,如果FrobManager::HandleFrob() or operator new抛出异常。在这个例子中,增量为m_NumberOfFrobs不会被回滚。因此,任何使用此实例的人Frobber将有一个可能损坏的对象。