【发布时间】:2021-07-18 13:01:48
【问题描述】:
在 c++ 中返回正确的值是否是异常安全的? 例如,
template<typename Iterator, typename T>
T my_accumulate(Iterator first, Iterator last) {
return std::accumulate(first, last, T());
};
在上面的代码中,std::accumulate 可以抛出。
如果std::accumulate 抛出会发生什么?
T() 会导致内存泄漏?
还是出于某种原因安全?
我怎样才能为此编写异常安全代码?
【问题讨论】:
-
这段代码没有泄漏。
T()在本地自动内存中创建一个临时对象。对象在超出范围时被销毁,无论是否抛出异常。