代码之家  ›  专栏  ›  技术社区  ›  Daniel Langr

如果没有异常,为什么没有std::uninitialized\u move\u?

  •  7
  • Daniel Langr  · 技术社区  · 6 年前

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

    if constexpr (!std::is_nothrow_move_constructible_v<value_type>
                  && std::is_copy_constructible_v<value_type>)
      std::uninitialized_copy(...);
    else 
      std::uninitialized_move(...); 
    

    在C++ 17中没有引入吗?

    1 回复  |  直到 6 年前
        1
  •  10
  •   P.W    6 年前

    一篇关于 "Extending memory management tools" open-std.org 有关于 uninitialized_move

    未初始化的移动 uninitialized_copy uninitialized_move_if_noexcept ,可被视为解决这一问题的办法 . 这样的算法已经在libstdc++中使用 move_if_noexcept 迭代器。 鉴于目前没有基于范围的 如果没有异常,则移动 算法,这里不考虑这样的解