Is there a functional difference between the following? Is there any reason to prefer one over the other?
auto p = new C();
and
auto* p = new C();
In the snippet you have given there is no difference. The compiler will deduce that p will be a pointer to C, either way.
In a more general case, there is a difference. For example;
auto *p = func();
auto p = func();
The first form will cause an error message if func() returns something that is not a pointer, but the second will not. This is sometimes useful (e.g. in templated code) where there is a need to enforce a requirement that func() return a pointer rather than (say) an int. [Although, admittedly, there are more clear and powerful ways to enforce such a requirement, such as traits].
As noted by John Ilacqua in comments, there are further benefits of using auto *, including const qualification of the pointer. For example, const auto * p = func() specifies that p points at something that is const or const auto * const p = func() specifies that p points at something that is const AND p cannot be reassigned. Such qualification will also result in diagnostics if const qualifiers on the return type of func() are incompatible.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With