Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::pmr::n...ry_resource(3)  C++ Standard Libary std::pmr::n...ry_resource(3)

NAME
       std::pmr::null_memory_resource -	std::pmr::null_memory_resource

Synopsis
	  Defined in header <memory_resource>
	  std::pmr::memory_resource*  null_memory_resource() noexcept;	(since
       C++17)

	  Returns a pointer to a memory_resource that doesn't perform any  al-
       location.

Return value
	  Returns  a  pointer  p to a static storage duration object of	a type
       derived from
	  std::pmr::memory_resource, with the following	properties:

	    * its allocate() function always throws std::bad_alloc;
	    * its deallocate() function	has no effect;
	    * for any memory_resource r, p->is_equal(r)	returns	&r == p.

	  The same value is returned every time	this function is called.

Example
	  The program demos the	main usage of null_memory_resouce: ensure that
       a memory	pool
	  which	requires memory	allocated on the stack will NOT	allocate  mem-
       ory on the heap if
	  it needs more	memory.

       // Run this code

	#include <array>
	#include <cstddef>
	#include <iostream>
	#include <memory_resource>
	#include <string>
	#include <unordered_map>

	int main()
	{
	    // allocate	memory on the stack
	    std::array<std::byte, 20000> buf;

	    // without fallback	memory allocation on heap
	    std::pmr::monotonic_buffer_resource	pool{ buf.data(), buf.size(),
						      std::pmr::null_mem-
       ory_resource() };

	    // allocate	too much memory
	    std::pmr::unordered_map<long, std::pmr::string> coll{ &pool	};
	    try
	    {
		for (std::size_t i = 0;	i < buf.size();	++i)
		{
		    coll.emplace(i,   "just   a	  string   with	  number  "  +
       std::to_string(i));

		    if (i && i % 50 == 0)
			std::clog << "size: " << i << "...\n";
		}
	    }
	    catch(const	std::bad_alloc&	e)
	    {
		std::cerr << e.what() << '\n';
	    }

	    std::cout << "size:	" << coll.size() << '\n';
	}

Possible output:
	size: 50...
	size: 100...
	size: 150...
	std::bad_alloc
	size: 183

http://cppreference.com		  2022.07.31	  std::pmr::n...ry_resource(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::pmr::null_memory_resource&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help