#pragma once #include <memory> #include <functional> namespace jlib { //template <typename T> //struct deleter : public std::default_delete<T> //{}; template <typename T> class auto_free { public: typedef std::function<void(T*)> deleter; explicit auto_free(T* data, deleter dter = {}) : data_(data), deleter_(dter) {} ~auto_free() { if (data_ && deleter_) { deleter_(data_); } } protected: T* data_ = nullptr; deleter deleter_ = nullptr; }; }