Code: Alles auswählen
int main()
{
auto p = new_unique int;
auto a = new_unique_array int[5];
std::cout << typeid(p).name() << std::endl; // unique_ptr<int>
std::cout << typeid(a).name() << std::endl; // unique_ptr<int[]>
return 0;
}
Code: Alles auswählen
#include <memory>
namespace language_ext
{
struct new_unique_seed { };
template <class T>
inline std::unique_ptr<T> operator *(new_unique_seed, T *p)
{
return std::unique_ptr<T>(p);
}
struct new_unique_array_seed { };
template <class T>
inline std::unique_ptr<T[]> operator *(new_unique_array_seed, T *p)
{
return std::unique_ptr<T[]>(p);
}
}
#define new_unique ::language_ext::new_unique_seed() * new
#define new_unique_array ::language_ext::new_unique_array_seed() * new
Hausaufgabe: Anwendung auf andere Smart Pointers, z.B. shared_ptr.