智能指针自定义删除器中的处理条件
Handling conditions within smart pointer custom deleters
我有一个唯一的指针,其中包含作为lambda函数提供的自定义删除器。在 lambda 函数中,我需要处理 2 种情况。如果发生异常,则做一件事,如果没有,则做另一件事。知道 lambda 函数内发生的异常的最佳方法是什么?
void f()
{
//start a transaction
std::unique_ptr<Transaction> transactionOb(new Transaction(),[](Transaction* transaction)
{
if(exception occurred)
{
transaction->rollback()
}
else
{
transaction->commit()
}
});
try
{
//write data to database
}
catch()
{
//handle exception
}
}
假设transactionOb
没有将其Transaction
移交给其他地方,则可以引用捕获某些本地状态,并将其设置为catch
中的其他值
void f()
{
bool didExcept = false;
//start a transaction
std::unique_ptr<Transaction> transactionOb(new Transaction(),[&didExcept](Transaction* transaction)
{
if(didExcept)
{
transaction->rollback()
}
else
{
transaction->commit()
}
// Missing delete transaction
});
try
{
//write data to database
}
catch()
{
didExcept = true;
//handle exception
}
}
或者,您也可以在catch
中回滚,并取消设置指针。
void f()
{
//start a transaction
std::unique_ptr<Transaction> transactionOb(new Transaction(),[](Transaction* transaction)
{
if(transaction)
{
transaction->commit()
}
delete transaction;
});
try
{
//write data to database
}
catch()
{
transactionOb->rollback();
delete transactionOb.release();
//handle exception
}
}
相关文章:
- 基于多个条件处理地图中的所有元素
- 在通知提升间处理条件变量时未按住锁会导致问题
- C++11如何在1个线程中使用条件变量处理2个线程安全队列
- 当线程处理不同的类时,应该在哪里声明条件变量、互斥对象
- 如何处理以 2D 数组编写的条件
- 智能指针自定义删除器中的处理条件
- 处理核心转储条件
- 如何检查和处理前提条件
- absl::Mutex 的条件关键部分如何处理读取器唤醒
- C++,sqlite3.当 BLOB 字段用作查询条件时如何处理它?
- 如何处理 IF 中的多个 OR 条件
- 在C 中处理Boost线程条件
- VS2010 未正确处理预处理器条件下的"includes"
- 竞争条件:一个线程创建静态对象,另一个线程在初始化完成之前使用它.如何处理
- 使用try-Catch异常处理程序和if-else条件检查之间的区别
- c++编译器如何处理在条件语句中声明的类型
- 在初始化成员变量期间有条件地处理异常
- OpenMP:如何处理全局std向量上的种族条件
- 具有已定义宏的 iOS 预处理条件会导致"token is not valid"
- 在预处理条件中使用布尔字面值是否有效?