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

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

49得票4回答
“检查自赋值”有什么问题,它是什么意思?

在Herb Sutter的书Exceptional C++ (1999)中,他在第10项解决方案中有这样的话: "异常不安全"和"设计不良"是相互关联的。如果一段代码不是异常安全的,那通常是可以简单修复的。但是,如果由于其基础设计而无法使代码变得异常安全,那几乎总是表明其设计不良。 示例1...

31得票7回答
确保始终捕获异常。

C++中的异常不需要被调用函数捕获(没有编译时错误)。因此,开发人员可以根据自己的判断是否使用try/catch来捕获它们(与Java不同)。 有没有一种方法可以确保始终使用try/catch来捕获抛出的异常?

28得票2回答
C++17中std::make_shared()的更改

在cppref中,直至C++17,以下内容成立: 像f(std::shared_ptr<int>(new int(42)), g())的代码可能会导致内存泄漏,如果g在new int(42)之后被调用并且抛出异常,而f(std::make_shared<int>...

28得票3回答
标准容器和算法的所有异常保证在哪里可以找到?

是的,我看过我能找到的C++标准(或者草案),但我没有找到STL容器所提供的完整的异常保证。所有我能找到的只是偶然的在一些函数和一些类型上不完整的描述。或许它就在那里,但我没找到,我也不知道。注意:我并不要求列出人们能想到的所有保证,这基本上已经在这个问题中了。我正在寻找这些信息的权威来源本身...

27得票2回答
std::unordered_map::merge()的安全性

在编写目标为C++17的代码时,我遇到了一个障碍,无法确定合并两个兼容的std::unordered_maps操作的异常安全性。根据当前工作草案,§26.2.7,表91部分内容如下,关于a.merge(a2)的条件: 要求: a.get_allocator() == a2.get_allo...

22得票1回答
使用emplace_back添加unique_ptrs容器是否安全?

请参考以下内容: 考虑以下问题: std::vector<std::unique_ptr<int>> ptrsToInts; ptrsToInts.emplace_back(new int); 如果在向量中进行重新分配,而这失败了(抛出std::bad_allo...

22得票2回答
当调用log.Fatalln时,延迟函数会被调用吗?

db, err := sql.Open("postgres", "…") if err != nil { log.Fatalln(err) } defer db.Close() tpl, err := template.ParseGlob("") if err != nil { ...

21得票3回答
异常安全和make_unique

只是为了澄清,使用make_unique仅在表达式中有多个分配时才增加异常安全性,而不仅仅是一个分配,对吗?例如: void f(T*); f(new T); 在异常安全方面,它是完美的(就分配和其他方面而言),而 void f(T*, T*); f(new T, new T); ...

20得票4回答
在C++中是否有标准的类可以在作用域结束时将变量设置为特定值?

在成员函数的范围内,我想临时将一个成员变量设置为特定值。 然后,当此函数返回时,我希望将该成员变量重置为已知值。 为了防止异常和多次返回,并且我用一个简单的类似RAII的类来完成。它在成员函数的范围内定义。void MyClass::MyMemberFunction() { str...