C++ scoped_allocator::inner_allocator() Function



The std::scoped_allocator::inner_allocator() function in C++, provides a access to the inner allocator used for allocating nested objects in a scoped allocator. It is used in container-of-container scenarios, where each level of allocation needs a separate allocator. It returns the reference to the allocator for the next level of allocation.

Syntax

Following is the syntax for std::scoped_allocator::inner_allocator() function.

inner_allocator_type& inner_allocator() noexcept;
or
const inner_allocator_type& inner_allocator() const noexcept;

Return Value

This function returns a reference to the inner allocator.

Example 1

Let's look at the following example, where we are going to create a scoped_allocator_adaptor with two nested scoped allocators, then applying the inner_allocator() to retrieve the second allocator.

#include <iostream>
#include <memory>
#include <scoped_allocator>
#include <vector>
int main() {
   using x = std::allocator < int > ;
   using y = std::scoped_allocator_adaptor < x, x > ;
   y outerAlloc;
   auto innerAlloc = outerAlloc.inner_allocator();
   std::cout << "Retrieved successfully.\n";
   return 0;
}

Output

Output of the above code is as follows −

Retrieved successfully.

Example 2

Consider the following example, where we are going to define the scoped_allocator_adaptor, then the inner_allocator() retrieves the int allocator, which is then used to allocate memory for a vector <int>.

#include <iostream>
#include <vector>
#include <memory>
#include <scoped_allocator>
int main() {
   using x = std::allocator < int > ;
   using y = std::scoped_allocator_adaptor < std::allocator < std::vector < int, x >> , x > ;
   y scopedAlloc;
   auto z = scopedAlloc.inner_allocator();
   std::vector < int, x > x1(z);
   x1.push_back(11);
   x1.push_back(23);
   std::cout << "Result : ";
   for (int val: x1) std::cout << val << " ";
   return 0;
}

Output

Output of the above code is as follows −

Result : 11 23
cpp_scoped_allocator.htm
Advertisements