小编Chr*_*ter的帖子

何时可以在函数及其参数之间交错未序列的代码?

假设我有类型TU和函数U f(T)T g(),和我写的表达f(g()).在什么情况下,附近的未序列表达式中的代码可能在之后g但之前执行f

我理解一个情况是在函数调用中h(f(g()), j()),j可以在任何时候相对于g和执行f.这基本上是唯一的例子,还是其他的?

为动机,所述功能std::make_shared<T>std::make_unique<T>可用于写更多异常安全代码,如图的由不安全代码此示例http://herbsutter.com/gotw/_102/:

// In some header file:
void f( std::unique_ptr<T1>, std::unique_ptr<T2> );

// At some call site:
f( std::unique_ptr<T1>{ new T1 }, std::unique_ptr<T2>{ new T2 } );
Run Code Online (Sandbox Code Playgroud)

T2构造可以在后抛出异常T1构造函数,但在之前std::unique_ptr<T1>的构造,从而导致T1被泄露.解决方案是改为编写f( make_unique<T1>(), make_unique<T2>() );.

我发现的所有异常安全性的讨论都std::unique_ptr使用相同的例子.这让我想知道多参数函数中的参数表达式(包括像+和这样的某些运算符 …

c++ c++11

0
推荐指数
1
解决办法
103
查看次数

标签 统计

c++ ×1

c++11 ×1