我刚刚意识到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中有替代方案吗?
答案 0 :(得分:10)
根据the proposal that deprecates it:
如果今天提出这个API将被认为是一个不完整的想法。作为一个功能API,如果分配缓冲区的函数泄漏,它缺乏异常安全性,但我们不提供类似RAII的包装器来促进安全使用。
有人建议,此API的所有当前实现实际上都不会比常规
new
运算符执行更有效的分配,如果确实如此,我们应该认真考虑弃用此工具。否则,我们应该用适当的防护/包装类完成设计,并鼓励供应商提供错失的优化机会。
简而言之,只需使用new
/ delete
即可。或者你自己的临时内存分配器;以最适合您需求为准。