C++ memory_resource::resource() Function



The C++ memory_resource::resource() function is used to provide the access to the underlying memory resource used by a polymorphic memory resource. This function returns a pointer to the base memory resource, which is essential for understanding or chaining resource allocation strategies.

Exception:If you try to access resource that already has been deallocated or it is not available then resource() may throw std::runtime_error exception.

Syntax

Following is the syntax for std::memory_resource::resource() function.

resource() const noexcept;

Parameters

It does not accepts any parameter.

Return Value

This function returns the memory resource pointer used by this polymorphic allocator.

Example 1

Let's look at the following example, where we are going to retrieve the upstream memory resource of a std::pmr::unsynchronized_pool_resource.

#include <iostream>
#include <memory_resource>
int main() {
    std::pmr::unsynchronized_pool_resource a(std::pmr::get_default_resource());
    std::pmr::memory_resource* x = a.upstream_resource();
    if (x == std::pmr::get_default_resource()) {
        std::cout << "Resource is the default resource.\n";
    } else {
        std::cout << "Resource is not the default resource.\n";
    }
    return 0;
}

Output

If we run the above code it will generate the following output −

Resource is the default resource.

Example 2

Consider the following example, where we are going to use the chaining memory resources, where the secondary resource uses the primary as its upstream.

#include <iostream>
#include <memory_resource>
int main() {
    char a1[111];
    std::pmr::monotonic_buffer_resource x1(a1, sizeof(a1));
    char a2[222];
    std::pmr::monotonic_buffer_resource x2(a2, sizeof(a2), &x1);
    std::pmr::memory_resource* upstream = x2.upstream_resource();
    if (upstream == &x1) {
        std::cout << "x2 resource's upstream is the x1 resource.\n";
    }
    return 0;
}

Output

Output of the above code is as follows −

x2 resource's upstream is the x1 resource.
cpp_memory_resource.htm
Advertisements