Namespaces
Variants
Views
Actions

std::get_temporary_buffer

From cppreference.com
< cpp‎ | memory
Revision as of 18:20, 26 August 2013 by P12 (Talk | contribs)

 
 
 
 
Defined in header <memory>
template< class T >
std::pair< T*, std::ptrdiff_t > get_temporary_buffer( std::ptrdiff_t count )

Allocates storage sufficient to store up to count adjacent objects of type T. If there is insufficient memory for all count objects, allocates less than count, if possible.

Contents

Parameters

count - the number of objects to allocate

Return value

An std::pair holding a pointer to the beginning of the allocated storage and the number of objects that fit in the storage that was actually allocated (may be zero).

Exceptions

(none) (until C++11)
noexcept specification:  
noexcept
  
(since C++11)

Example

#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);
    // requires that p.first is passed to return_temporary_buffer
    // (beware of early exit points and exceptions)
 
    std::copy(s, s + p.second,
              std::raw_storage_iterator<std::string*, std::string>(p.first));
    // requires that each string in p is individually destroyed
    // (beware of early exit points and exceptions)
 
    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);
}

Output:

string
1
test
...

See also

frees uninitialized storage
(function template) [edit]