49得票14回答
最简单、最整洁的C++11 ScopeGuard

我正在尝试编写一个基于Alexandrescu概念的简单ScopeGuard,但使用c++11习惯用法。 namespace RAII { template< typename Lambda > class ScopeGuard { mu...

33得票8回答
ScopeGuard的使用是否真的会导致更好的代码?

我多年前看到了由Andrei Alexandrescu和Petru Marginean撰写的这篇文章,其中介绍和讨论了一个名为ScopeGuard的实用程序类,用于编写异常安全代码。我想知道使用这些对象编码是否真的会导致更好的代码,还是它会使错误处理变得复杂,因为也许在catch块中呈现守卫的...

17得票1回答
为什么Alexandrescu不能使用std::uncaught_exception()来在ScopeGuard11中实现SCOPE_FAIL呢?

许多人无疑对Alexandrescu先生的ScopeGuard模板(现在是Loki的一部分)和这里介绍的新版本ScopeGuard11非常熟悉: http://channel9.msdn.com/Shows/Going+Deep/C-and-Beyond-2012-Andrei-Alexan...

9得票2回答
是否会对作用域保护/作用域退出惯用语进行标准化?

在作用域退出时运行 lambda 似乎是一件很基础的事情,我希望它能够得到标准化。像 unique_ptr 这样的东西更好,但当使用 C 风格的库时,我发现总是需要无数个“临时”的析构函数。有没有人知道这是否会实现呢?

9得票1回答
C++:为什么这个简单的作用域守卫有效?

到目前为止,每个作用域守卫都有一个守卫布尔变量。例如,请参见此讨论:最简单和最整洁的c++11 ScopeGuard 但是一个简单的守卫也可以工作(gcc 4.9,clang 3.6.0): template <class C> struct finally_t : publi...

8得票2回答
谁会复制函数的返回值?

在函数返回值的拷贝或移动中,是调用者还是被调用者来完成?例如,如果我想要实现队列的pop()函数,如下所示: template <typename T> class queue { std::deque<T> d; public: // ... //...

7得票2回答
RAII函数对和模板特化的包装器

我为一对初始化和释放资源的 C 函数编写了一个 RAII 包装器,它在大多数情况下都能很好地服务于我。 #include <GL/glfw.h> #include <string> #include <functional> #include <st...