2015-07-21 129 views
0

std::get_temporary_buffer返回std::pair,它持有一个指向分配存储开始位置的指针和分配的对象个数,其唯一目的是:std::return_temporary_buffer用于取消分配内存以前分配std::get_temporary_bufferstd :: get_temporary_buffer返回的是原始指针而不是智能的指针

这两个函数都位于<memory>头上,主要目的是提供增强内存管理(正如其名称所暗示的)的工具并使内存管理更加安全。

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

C++ 14还增加了std::make_unique帮助函数,所以我们可以在很多情况下避免使用原始指针。

在减少原始指针使用的所有努力中,实现std::get_temporary_buffer返回一个原始指针而不是智能指针是相当混乱的。这就是为什么我想问:

  • 是否有任何理由std::get_temporary_buffer返回一个原始指针,而不是返回一个聪明的指针?
  • 如果出现这种“老式”手动分配和释放内存的原因,使用智能指针无法实现哪个目标?

回答

3

如果你看一下文档的get_temporary_buffer等人的旧SGI STL实现,他们说...

注:仅供向后兼容get_temporary_bufferreturn_temporary_buffer。如果您正在编写新代码,则应该使用temporary_buffer类。

这有效地承认更好的自动化管理的可取性。 GCC增加了temporary_buffer作为扩展(见here),但它从未将其纳入标准。总之,它只是没有用,所以拥有更好的界面并不是优先考虑的事情。面对大多数现代操作系统所使用的乐观内存分配策略,操作系统的整个概念都会猜测它是否应该为您提供所有请求的内存或一些较小的数量,一旦您获得多次请求而不是容易获得记忆太过慷慨,第一次让其他人有点饿死:不是一个非常实用的想法。

如果你在意,你可以提交一个建议,为以后的C++标准....

6

简单的答案是,std::get_temporary_buffer成立之前的智能指针进行了规范,并改变std::get_temporary_buffer在C++ 11的返回值将有断码的是依赖于它,这是C++标准库绝对不可接受的。

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