我经常遇到这样一种情况,我需要一个简单的 RAII 包装器,但由于时间限制和组织问题等多种原因,我不想为此创建一个全新的类。我的快速解决方案如下。
假设我想确保在范围结束时,我想要一个 bool 值切换回其原始状态:
bool prevState = currState;
currState = newState;
std::unique_ptr<int, std::function<void(int*)>> txEnder(new int(0), [&prevState](int* p) {
currState = prevState;
delete p;
});
这个解决方案工作正常,但肮脏的部分是分配和释放整数的必要性只是为了使 unique_ptr
工作并在销毁时调用自定义析构函数。
有没有更简洁的方法来做到这一点,而不必编写整个类,并摆脱虚拟 int
的 new
?
最佳答案
您可以使用 BOOST_SCOPE_EXIT
auto prevState{currState};
currState = newState;
BOOST_SCOPE_EXIT(&currState, &prevState)
{
currState = prevState;
} BOOST_SCOPE_EXIT_END
关于c++ - 在 C++11(或更新版本)中创建 RAII 包装器而无需编写新类的最短路径是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53739994/