Ejemplo n.º 1
0
void test_scope_guard()
{
	{
		int *pi = new int;
		ZL::ScopeGuard onExit([&] { delete pi; pi = nullptr; });
	}
	{
		SC *sc = new SC;
		ZL::ON_SCOPE_EXIT([&sc]{ delete sc; sc = nullptr; }); // Ok
		//ON_SCOPE_EXIT([&sc]{ Safe_Delete(sc) }); // Ok		
	}
	std::cout << "===================\n";
	{
		SC *sc = new SC;
		//ON_SCOPE_EXIT([&sc]{ Safe_Delete(sc) });
		ZL::ScopeGuard rollbackIfFail([&]{ sc->RollBack(); });
		do
		{
			//do something.....
			if (sc->Fail())
			{
				break;
			}
			rollbackIfFail.dismiss(); //上面if失败,走不到这里,因此会导致ScopeGuard执行sc的RollBack函数
		} while (0);
	}
	std::cout << "===================\n";
	{
		SC *sc = new SC(1);
		ZL::ON_SCOPE_EXIT([&sc]{ Safe_Delete(sc) });
		ZL::ScopeGuard rollbackIfFail([&]{ sc->RollBack(); });
		do
		{
			//do something.....
			if (!sc->Success())
			{
				break;
			}
			rollbackIfFail.dismiss(); //执行到这里,设置取消rollback机制,执行成功
		} while (0);
	}