【发布时间】:2013-10-28 15:33:33
【问题描述】:
澄清一下,使用make_unique 仅在表达式中有多个分配时才增加异常安全性,而不仅仅是一个,对吗?例如
void f(T*);
f(new T);
是完全异常安全的(就分配和东西而言),而
void f(T*, T*);
f(new T, new T);
不是,对吗?
【问题讨论】:
-
您的问题似乎自相矛盾。首先你断言多重分配是异常安全的,然后你展示了一个表面上与实际情况相反的例子。
-
@LightnessRacesinOrbit 不,我断言多次分配不是异常安全的。我说过“make_unique 仅在表达式中有多个分配时才增加异常安全性”,这意味着它只为一个分配添加任何内容。
-
您的问题在您的示例中没有使用
make_unique或unique_ptr,因为? -
@Yakk 因为它不需要它
-
multiple allocations in an expression但通过new T进行的每个分配是 一个单独的表达式,因此您有相反的情况:每个多个表达式分配一个。函数调用是 itself 一个包含其他 2 的表达式并不会改变这一点。但除了措辞之外,你走在了正确的轨道上。根据我的阅读,Sutter 制定的规则是,通过从单独的函数调用返回,在其自己的 statement 或 sequence 中执行每个分配,从而避免奇怪的排序& 泄漏:gotw.ca/gotw/056.htm (oldie-but-goodie)
标签: c++ c++11 unique-ptr exception-safety