function template
<memory>

std::get_temporary_buffer

template <class T>  pair <T*,ptrdiff_t> get_temporary_buffer ( ptrdiff_t n );
template <class T>  pair <T*,ptrdiff_t> get_temporary_buffer ( ptrdiff_t n ) noexcept;
Get block of temporary memory
Requests a temporary block of storage to contain up to n elements of type T temporarily.

The block of storage is aligned apropriately to contain elements of type T if T has a fundamental alignment, although it is left uninitialized (no object is constructed).

This function is specifically designed to obtain memory of temporary nature (such as for the operations of an algorithm). Once the memory block is not needed anymore, it shall be released by calling return_temporary_buffer.

Notice that the actual size of the buffer returned may be smaller than requested (the actual size is indicated as part of the return value).

参数

n
Number of elements of type T for which temporary memory is requested.
ptrdiff_t is an integral type.

返回值

On success, the function returns a pair object with itsfirstelement containing a pointer to the first element in the block, and thesecondelement its size, in terms of number of elements of type T that it can hold.

If the storage cannot be allocated, the pair contains a null pointer asfirstand a value of zero assecond.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// get/return_temporary_buffer example
#include <iostream>
#include <memory>
#include <algorithm>

int main () {
  int numbers[] = {30,50,10,20,60,40};

  // use temporary buffer to sort and show the numbers:
  std::pair <int*,std::ptrdiff_t> result = std::get_temporary_buffer<int>(6);
  if (result.second>0)
  {
    std::uninitialized_copy (numbers,numbers+result.second,result.first);
    std::sort (result.first,result.first+result.second);
    std::cout << "sorted numbers  : ";
    for (int i=0;i<result.second;i++)
      std::cout << result.first[i] << " ";
    std::cout << '\n';
    std::return_temporary_buffer (result.first);
  }

  // show original numbers:
  std::cout << "unsorted numbers: ";
  for (int i=0;i<6;i++)
    std::cout << numbers[i] << " ";
  std::cout << '\n';
  return 0;
}

可能的输出

sorted numbers  : 10 20 30 40 50 60
unsorted numbers: 30 50 10 20 60 40


另见