#pragma once
#include <memory>
template<typename T, typename ...Args>
std::unique_ptr<T> make_unique(Args&& ...args)
{
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
template<typename T>
struct qobject_deleter
{
void operator() (T *qobject)
{
if (qobject && !qobject->parent())
delete qobject;
}
};
template<typename T>
using qobject_ptr = std::unique_ptr<T, qobject_deleter<T>>;
template<typename T, typename ...Args>
qobject_ptr<T> make_qobject(Args&& ...args)
{
return qobject_ptr<T>(new T(std::forward<Args>(args)...));
}