
- C++ Library - Home
- C++ Library - <fstream>
- C++ Library - <iomanip>
- C++ Library - <ios>
- C++ Library - <iosfwd>
- C++ Library - <iostream>
- C++ Library - <istream>
- C++ Library - <ostream>
- C++ Library - <sstream>
- C++ Library - <streambuf>
- C++ Library - <atomic>
- C++ Library - <complex>
- C++ Library - <exception>
- C++ Library - <functional>
- C++ Library - <limits>
- C++ Library - <locale>
- C++ Library - <memory>
- C++ Library - <new>
- C++ Library - <numeric>
- C++ Library - <regex>
- C++ Library - <stdexcept>
- C++ Library - <string>
- C++ Library - <thread>
- C++ Library - <tuple>
- C++ Library - <typeinfo>
- C++ Library - <utility>
- C++ Library - <valarray>
- The C++ STL Library
- C++ Library - <array>
- C++ Library - <bitset>
- C++ Library - <deque>
- C++ Library - <forward_list>
- C++ Library - <list>
- C++ Library - <map>
- C++ Library - <multimap>
- C++ Library - <queue>
- C++ Library - <priority_queue>
- C++ Library - <set>
- C++ Library - <stack>
- C++ Library - <unordered_map>
- C++ Library - <unordered_set>
- C++ Library - <vector>
- C++ Library - <algorithm>
- C++ Library - <iterator>
- The C++ Advanced Library
- C++ Library - <any>
- C++ Library - <barrier>
- C++ Library - <bit>
- C++ Library - <chrono>
- C++ Library - <cinttypes>
- C++ Library - <clocale>
- C++ Library - <condition_variable>
- C++ Library - <coroutine>
- C++ Library - <cstdlib>
- C++ Library - <cstring>
- C++ Library - <cuchar>
- C++ Library - <charconv>
- C++ Library - <cfenv>
- C++ Library - <cmath>
- C++ Library - <ccomplex>
- C++ Library - <expected>
- C++ Library - <format>
- C++ Library - <future>
- C++ Library - <flat_set>
- C++ Library - <flat_map>
- C++ Library - <filesystem>
- C++ Library - <generator>
- C++ Library - <initializer_list>
- C++ Library - <latch>
- C++ Library - <memory_resource>
- C++ Library - <mutex>
- C++ Library - <mdspan>
- C++ Library - <optional>
- C++ Library - <print>
- C++ Library - <ratio>
- C++ Library - <scoped_allocator>
- C++ Library - <semaphore>
- C++ Library - <source_location>
- C++ Library - <span>
- C++ Library - <spanstream>
- C++ Library - <stacktrace>
- C++ Library - <stop_token>
- C++ Library - <syncstream>
- C++ Library - <system_error>
- C++ Library - <string_view>
- C++ Library - <stdatomic>
- C++ Library - <variant>
- C++ STL Library Cheat Sheet
- C++ STL - Cheat Sheet
- C++ Programming Resources
- C++ Programming Tutorial
- C++ Useful Resources
- C++ Discussion
C++ scoped_allocator::deallocate() Function
The std::scoped_allocator::deallocate() function in C++, is used to release the memory that was previously allocated by the allocate() function. It ensures the proper memory deallocation by freeing memory that is no longer in use, preventing the memory leaks.
This function is used within the container operations that manage dynamic memory and provides the scoped memory management mechanism to handle complex memory allocation and deallocation for nested containers.
Syntax
Following is the syntax for std::scoped_allocator::deallocate() function.
void deallocate( pointer p, size_type n ) noexcept;
Parameters
- p − It indicates the pointer to the previously allocated memory.
- n − It indicates the number of objects for which the memory was allocated.
Return Value
This function does not return anything.
Example 1
Let's look at the following example, where we are going to allocate the memory for 5 integers using the allocator() and later we used the deallocate() to free the memory.
#include <iostream> #include <memory> #include <scoped_allocator> int main() { std::scoped_allocator_adaptor < std::allocator < int >> x; int * array = x.allocate(2); x.deallocate(array, 2); std::cout << "Deallocated Successfully." << std::endl; return 0; }
Output
Output of the above code is as follows −
Deallocated Successfully.
Example 2
Consider the following example, where we are going to show how memory for a class object can be managed with custom new and delete operators using the scoped_allocator_adaptor.
#include <iostream> #include <memory> #include <scoped_allocator> class demo { public: void * operator new(std::size_t size) { std::scoped_allocator_adaptor < std::allocator < char >> x; void * p = x.allocate(size); std::cout << "Memory allocated." << std::endl; return p; } void operator delete(void * p, std::size_t size) { std::scoped_allocator_adaptor < std::allocator < char >> x; x.deallocate(static_cast < char * > (p), size); std::cout << "Memory deallocated." << std::endl; } }; int main() { demo * a = new demo; delete a; return 0; }
Output
Output of the above code is as follows −
Memory allocated. Memory deallocated.