std::get_temporary_buffer
定义于头文件 <memory>
|
||
template< class T > std::pair<T*, std::ptrdiff_t> get_temporary_buffer( std::ptrdiff_t count ); |
(C++11 前) | |
template< class T > std::pair<T*, std::ptrdiff_t> get_temporary_buffer( std::ptrdiff_t count ) noexcept; |
(C++11 起) (C++17 中弃用) (C++20 中移除) |
|
分配未初始化的相接存储,它应足以存储至多 count
个 T
类型的相邻对象。要求是非绑定的,且实现可以分配少于或多于存储 count
个相邻对象所需的内存。
参数
count | - | 所需的对象数量 |
返回值
一个 std::pair ,保有指向被分配存储起始的指针,和适合在实际分配的存储中的对象数。
若无法分配内存,或若分配的存储不足以存储单个 T
类型元素,则结果的 first
元素为空指针且 second
元素为零。
示例
运行此代码
#include <algorithm> #include <iostream> #include <memory> #include <string> #include <iterator> int main() { const std::string s[] = {"string", "1", "test", "..."}; const auto p = std::get_temporary_buffer<std::string>(4); // 要求将 p.first 传递给 return_temporary_buffer // (当心提前退出和异常) std::copy(s, s + p.second, std::raw_storage_iterator<std::string*, std::string>(p.first)); // 要求单独销毁每个 p 中的 string // (当心提前退出和异常) std::copy(p.first, p.first + p.second, std::ostream_iterator<std::string>{std::cout, "\n"}); std::for_each(p.first, p.first + p.second, [](std::string& e) { e.~basic_string<char>(); }); std::return_temporary_buffer(p.first); }
输出:
string 1 test ...
参阅
(C++17 中弃用)(C++20 中移除) |
释放未初始化存储 (函数模板) |