That looks to me like simply an unusual combination of a number of not-so-unusual things. I would say it is absolutely not dangerous, but whether it is bad practice it probably a matter of opinion.
I think it's probably okay.
Here's food for thought:
Code:
template <typename T> T& new_ref()
{
return *(new T());
}
template <typename T, typename P1> T& new_ref(P1 p1)
{
return *(new T(p1));
}
template <typename T, typename P1, typename P2> T& new_ref(P1 p1, P2 p2)
{
return *(new T(p1, p2));
}
... etc
Of course this makes deletion a little unintuitive and easily forgotten, so I wouldn't suggest actually using code like the above.