cost 194 ms
C++ scope 保护,零开销 - C++ scope guard with zero overhead

在 C++ 中,我们可以确保在退出 scope 时调用foo ,方法是将foo()放入本地 object 的析构函数中。 当我领导“范围守卫”时,这就是我的想法。 有很多通用的实现。 我想知道——只是为了好玩——与仅在每个退出点编写foo()相比,是否有可能以零开销实现 scope 防护的行为。 零 ...

仅通过引用捕获的 lambda 表达式是否保证不会抛出? - Is a lambda-expression that only captures by reference guaranteed not to throw?

使用 C++20 P0052的scope_guard (以及许多其他风格的 scope 守卫),考虑这个典型的用例: 该代码依赖于 lambda 表达式本身(闭包对象的构造)不会抛出。 C++ 标准如何保证这一点? 我阅读了标准的章节(§7.5.5 Lambda 表达式),并没有发现关于 lam ...

有什么方法可以延长C ++中临时对象的寿命? - Is there any way to extend the lifetime of a temporary object in C++?

我写了一个作用域保护,它在作用域退出时会重置一个值: 从函数返回此范围卫士时,是否有任何方法可以防止如果未保存范围卫士,则立即销毁该范围卫士? 例如: 按照现在的编写方式,调用其中一个函数的任何人都必须记住始终将ResetGuard保存到本地变量,否则它将立即重置该值。 ...

ScopeGuard与功能的多个资源分配区和出口点一起使用 - ScopeGuard usage with multiple resourace allocatons and exit points in a fucntion

我在一个函数中分配了多个资源,因此有很多指针,在离开该函数之前,我必须从其中返回一个指针(假设为ret_ptr)并释放其他指针(所有othr_ptrs)。 我在此函数中有多个出口点(其中ret_ptr为0或它指向有效的内存或异常)。 因此,在所有return语句之前和在exception ...

使用std :: unique_ptr和lambdas推进对象的状态 - Using std::unique_ptr and lambdas to advance a state of an object

推进对象状态时,对简单对象和指针交换使用std::swap效果很好。 对于其他就地操作, Boost.ScopeExit可以很好地工作,但是如果您要在函数之间共享出口处理程序,则不是很优雅。 是否存在C ++ 11本机方式来完成类似于Boost.ScopeExit但允许更好的代码重用? ...

通过const引用的临时寿命 - Life extension of temporary by const reference

C ++ 我正在尝试查看const引用如何延长临时对象的寿命。 我正在从摘录中运行代码,这些答案之一是C ++中的指针变量和引用变量之间有什么区别? 并且在VC11和g ++ 4.8之间得到了冲突的结果。 我在这里扩展了代码段: 回答者得到了结果: 我在VC11中进行 ...

用于函数对和模板特化的RAII包装器 - RAII wrapper for function pairs and template specialization

我为C函数对编写了一个RAII包装器,用于初始化和释放资源,在大多数情况下它都很适合我。 但是,当一个函数像Enter/LeaveCriticalSection一样返回void时,我不知道如何在这个类中执行它。 我应该专门为SuccessValueType = void case的类吗 ...

最简单最简洁的 c++11 ScopeGuard - The simplest and neatest c++11 ScopeGuard

我正在尝试基于 Alexandrescu 概念编写一个简单的 ScopeGuard,但使用 c++11 习语。 这是用法: 由于我的版本比那里的大多数示例(如 Boost ScopeExit)短得多,我想知道我遗漏了哪些专业。 希望我在这里处于 80/20 的场景中(我用 20% 的代码行获得了 ...

动态创建范围保护 - Dynamically created scope guards

我已经在DDJ中阅读了关于范围保护的文章( 通用:改变你编写异常安全代码的方式 - 永远 ),我理解它们的常用用法。 但是,常见的用途是在堆栈上为特定操作实例化特定堆栈保护,例如: 但是,如果我想在运行时安排清理操作,例如当我有一个循环时,该怎么办: 显然,上面的例子不起作 ...

ScopeGuard 的使用真的能带来更好的代码吗? - Does ScopeGuard use really lead to better code?

我在多年前看到 Andrei Alexandrescu 和 Petru Marginean 写的这篇文章,其中介绍并讨论了一个名为 ScopeGuard 的实用程序类,用于编写异常安全代码。 我想知道使用这些对象进行编码是否真的会产生更好的代码,或者它是否会混淆错误处理,因为也许守卫的回调会更好地呈 ...


 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM