问题标签 [scopeguard]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ 中 golang 样式延迟范围保护的性能
在阅读了关于在 C++ 中实现 Go 的延迟的问题后:
我对其中一个答案中给出的 go-defer like guard 子句的性能有疑问。它使用了一个 shared_ptr 删除器,它忽略了传递的对象地址。
如果删除器忽略了使用未命名参数的地址,它是否仍会在堆栈上传递。
以下任何一种实现延迟的方式会有什么不同吗?
c++ - 零开销的 C++ 范围保护
在 C++ 中,我们可以通过放入本地对象的析构函数来确保foo
在退出作用域时被调用。foo()
当我领导“范围守卫”时,这就是我的想法。有很多通用的实现。
我想知道——只是为了好玩——与仅foo()
在每个退出点写入相比,是否有可能以零开销实现范围保护的行为。
零开销,我认为:
至少 1 个字节的开销,为范围保护提供地址:
编译器会优化给出sg
地址吗?
一个稍微复杂一点的案例:
相对
的生命周期bar
完全包含 的生命周期sg
及其持有的 lambda(以相反的顺序调用析构函数),但持有的 lambdasg
仍然必须持有对bar
. 例如,我的意思是在我的 64 位系统上int x; auto l = [&]{return x;};
提供。sizeof(l) == 8
是否有一些模板元编程魔法可以在scope_guard
没有任何开销的情况下实现糖?