Quick A: Use unique_ptr
when you can.
Recently on SO:
Being smart with smart pointers: avoiding shared_ptr overuse
To allow
unique_ptr/shared_ptr
, you may use template:// Dispatcher for make_unique/make_shared template <template <typename...> class Ptr, typename T> struct make_helper; template <typename T> struct make_helper<std::unique_ptr, T> { template <typename ...Ts> std::unique_ptr<T> operator() (Ts&&... args) const { return std::make_unique<T>(std::forward<Ts>(args)...); } }; template <typename T> struct make_helper<std::shared_ptr, T> { template <typename ...Ts> std::shared_ptr<T> operator() (Ts&&... args) const { return std::make_shared<T>(std::forward<Ts>(args)...); } }; template <template <typename...> class Ptr, typename T, typename ... Ts> auto make(Ts&&... args) { return make_helper<Ptr, T>{}(std::forward<Ts>(args)...); }And then
bool get_resource_parameters(Param1& param1,..., ParamN& paramN) { //... } template <template <typename...> class Ptr> Ptr<resource> open_resource(...) { Param1 param1; ... ParamN paramN; if(!get_resource_parameters(param1, ..., paramN)) return nullptr; return = make<Ptr, resource>(param1, ..., paramN); }And check for
nullptr
instead of splitbool
andsmart_pointer
.
Add a Comment
Comments are closed.