19 template <
class T,
typename... Args>
21 reset(
int, T & obj, Args... args) -> decltype(obj.reset(args...),
void())
23 obj.reset(std::forward<Args>(args)...);
26 template <
class T,
typename... Args>
51 if (
auto _poolptr =
_pool.lock())
55 (*_poolptr.get())->
add(std::unique_ptr<T>{ptr});
62 std::default_delete<T>{}(ptr);
66 std::weak_ptr<SharedPool<T> *>
_pool;
70 typedef typename std::unique_ptr<T, ExternalDeleter>
PtrType;
75 void add(std::unique_ptr<T> t) {
_pool.push(std::move(t)); }
77 template <
typename... Args>
84 return std::move(
PtrType(
new T(std::forward<Args>(args)...),
93 reset(1, *tmp, std::forward<Args>(args)...);
107 std::stack<std::unique_ptr<T>>
_pool;
size_t num_created() const
std::stack< std::unique_ptr< T > > _pool
auto reset(int, T &obj, Args... args) -> decltype(obj.reset(args...), void())
std::unique_ptr< T, ExternalDeleter > PtrType
void add(std::unique_ptr< T > t)
ExternalDeleter(std::weak_ptr< SharedPool< T > *> pool)
std::shared_ptr< SharedPool< T > * > _this_ptr
class infix_ostream_iterator if void
std::weak_ptr< SharedPool< T > * > _pool
Originally From https://stackoverflow.com/a/27837534/2042320.
PtrType acquire(Args &&... args)