std :: get_temporary_buffer返回原始指针而不是智能指针

Pap*_*ter 0 c++ memory-management c++11

std::get_temporary_buffer回报std::pair持有的指针分配存储的开始和分配对象的数目,以及其对应的唯一的目的:std::return_temporary_buffer是为了释放内存之前与分配std::get_temporary_buffer.

这两个函数都位于<memory>标题上,其主要目的是提供增强内存管理的工具(顾名思义)并使内存管理更安全.

关于内存管理的安全性,<memory>头部还提供了智能指针实用程序,它允许以类似RAII的方式管理内存,从而使内存管理异常安全.

C++ 14还添加了std::make_unique辅助函数,因此我们现在可以避免在许多情况下使用原始指针.

通过所有这些努力减少原始指针的使用,实现std::get_temporary_buffer返回原始指针而不是智能指针是非常令人困惑的.这就是为什么我想问:

  • 是否有理由std::get_temporary_buffer返回原始指针而不是返回智能指针?
  • 如果有这种" 老式 "方式手动分配和释放内存的原因,那么智能指针无法实现哪些目标呢?

KAB*_*ult 6

简单的答案是std::get_temporary_buffer在智能指针标准化之前创建的,并且更改std::get_temporary_bufferC++ 11中的返回值会破坏依赖于它的代码,这对于C++标准库来说是绝对不可接受的.

现在,为什么他们没有标准化新的智能指针等效?好吧,也许没有人对拥有它感兴趣.就个人而言,我发现有一个智能指针拥有许多对象是很奇怪的.如果您需要智能阵列,请使用std::vector.