Skip to content
unique_ptr with pool

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.

#include <iostream>

#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<S, 10> 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<S, decltype(pool_deleter)>;

  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.