首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么没有std::uninitialized_move_if_noexcept?

为什么没有std::uninitialized_move_if_noexcept?
EN

Stack Overflow用户
提问于 2018-10-23 07:20:47
回答 1查看 498关注 0票数 10

C++17添加了std::uninitialized_move,但是没有std::uninitialized_move_if_noexcept在内部使用std::move_if_noexcept。在我看来,这将是有用的,因为现在,如果我们想重新分配,我们仍然需要写一些

代码语言:javascript
复制
if constexpr (!std::is_nothrow_move_constructible_v<value_type>
              && std::is_copy_constructible_v<value_type>)
  std::uninitialized_copy(...);
else 
  std::uninitialized_move(...); 

std::uninitialized_move_if_noexcept没有在C++17中引入有什么特殊的原因吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-23 07:29:46

一篇关于“扩展内存管理工具” at open-std.org的论文有一个关于uninitialized_move的章节,讨论这个问题。

对于uninitialized_move的异常处理提出了一些关注。如果移动构造函数抛出,源对象可能已被不可挽回地损坏。由于没有解决这个问题的方法,我们实现了销毁目标缓冲区中所有完全构造的对象并传播异常的自然语义和预期语义。这尽可能地与uninitialized_copy的行为相匹配。作为一种附加的算法,uninitialized_move_if_noexcept**可以被认为是对的一种解决方案。这样的算法已经在libstdc++中使用move_if_noexcept迭代器实现了。考虑到目前还没有基于范围的move_if_noexcept 算法,这样的解决方案在这里并不是考虑的。显然,这样一个特性是很容易实现的,然而。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52943287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档