# std::get_temporary_buffer

< cpp‎ | memory

定义于头文件 `<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
    ...

### 参阅

return_temporary_buffer (C++17 中弃用)(C++20 中移除) | 释放未初始化存储 (函数模板)