/* This is an example illustrating the use of the dlib::std_allocator object. In this example we will create the necessary typedefs to give the dlib::std_allocator object to the standard string and vector objects in the STL. Thus we will create versions of std::string and std::vector that perform all their memory allocations and deallocations via one of the dlib memory manager objects. */ // include everything we need for this example #include #include #include #include "dlib/std_allocator.h" #include "dlib/memory_manager.h" #include "dlib/memory_manager_stateless.h" using namespace std; using namespace dlib; int main() { // Make a typedef for an allocator that uses the thread safe memory_manager_stateless object with a // global memory pool. This version of the memory_manager_stateless object keeps everything it allocates // in a global memory pool and doesn't release any memory until the program terminates. typedef std_allocator::kernel_2_3a> alloc_char_with_global_memory_pool; // Now make a typedef for a C++ standard string that uses our new allocator type typedef std::basic_string, alloc_char_with_global_memory_pool > dstring; // typedef another allocator for dstring objects typedef std_allocator::kernel_2_3a> alloc_dstring_with_global_memory_pool; // Now make a typedef for a C++ standard vector that uses our new allocator type and also contains the new dstring typedef std::vector dvector; // Now we can use the string and vector we have as we normally would. So for example, I can make a // dvector and add 4 strings into it like so: dvector v; v.push_back("one"); v.push_back("two"); v.push_back("three"); v.push_back("four"); // And now we print out the contents of our vector for (unsigned long i = 0; i < v.size(); ++i) { cout << v[i] << endl; } }