[C++] new_unique, new_shared ...
Verfasst: 21.08.2012, 19:44
Für alle, die von sichereren Alternativen zu new träumen, ohne wahlweise IntelliSense oder Lesbarkeit einzubüßen:
Das geht tatsächlich nicht erst 2021, 2041 oder 2061; nein, das geht schon heute:
In Action: http://ideone.com/HfPHw
Hausaufgabe: Anwendung auf andere Smart Pointers, z.B. shared_ptr.
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.