--- title: "unique_ptr with pool" --- This example shows objects being created from an `etl::pool`, stored in an `etl::unique_ptr`, and released back to the pool when the `etl::unique_ptr` goes out of scope. ```cpp #include #include "etl/memory.h" #include "etl/pool.h" // The object stored in the pool struct S { S(int a_, double b_) : a(a_), b(b_) { } int a; double b; }; int main() { // The pool to allocate from. etl::pool pool; // The deleter called by unique_ptr. auto pool_deleter = [&pool](auto ptr) { std::cout << "Releasing S(" << ptr->a << ", " << ptr->b << ") back to pool." << std::endl; pool.destroy(ptr); }; using Unique = etl::unique_ptr; Unique us1(pool.create(1, 2), pool_deleter); std::cout << "Created S(" << us1->a << ", " << us1->b << ") from pool." << std::endl; { // Unique with local scope. Unique us2(pool.create(3, 4), pool_deleter); std::cout << "Created S(" << us2->a << ", " << us2->b << ") from pool." << std::endl; } Unique us3(pool.create(5, 6), pool_deleter); std::cout << "Created S(" << us3->a << ", " << us3->b << ") from pool." << std::endl; } ``` ## Output Created S(1, 2) from pool. Created S(3, 4) from pool. Releasing S(3, 4) back to pool. Created S(5, 6) from pool. Releasing S(5, 6) back to pool. Releasing S(1, 2) back to pool.