【问题标题】:C++17, deprecated functions in <memory> standard library?C++17,<memory> 标准库中已弃用的函数?
【发布时间】:2018-06-02 00:07:28
【问题描述】:

我刚刚意识到Dynamic memory management 标准库的某些函数已在 C++17 中被弃用。一个例子是get_temporary_buffer:

template< class T >
std::pair< T*, std::ptrdiff_t > get_temporary_buffer( std::ptrdiff_t count );

有人可以解释为什么吗?我可以期待 C++20 中有替代方案吗?

【问题讨论】:

  • 它从未被广泛使用,实现通常只是使用operator new分配一块内存。
  • 好的,谢谢。我认为这是针对小缓冲区的某种优化内存池。
  • AFAIK 它通常用于实现std::inplace_merge,它可能会使用任何分配的内存,即使它没有所要求的那么多内存:内存越多,速度越快,但即使没有内存,算法也是如此仍然有效。

标签: c++ memory-management language-lawyer c++17 c++20


【解决方案1】:

根据the proposal that deprecates it

如果今天提出这个 API,它会被认为是一个不完整的想法。作为一个函数式 API,如果分配缓冲区的函数泄漏,它缺乏异常安全性,但我们没有提供类似 RAII 的包装器来促进安全使用。

有人建议,此 API 的所有当前实现实际上并不执行比常规 new 运算符更有效的分配,如果确实如此,我们应该认真考虑弃用此工具。否则,我们可能应该使用适当的保护/包装类来完成设计,并鼓励供应商提供错过的优化机会。

简而言之,只需使用new/delete。或者你自己的临时内存分配器;以最适合您的需求为准。

【讨论】:

    猜你喜欢
    • 2019-07-11
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多