The statement
Foo myFooLong = Foo(...args...);
first creates a Foo
object (the right side) and then copies it to the left operand using the copy construtor
.
The second statement just creates a new Foo
object.
There is no reason to prefer the first approach over the second. The first one involves unnecessary temporary creation and copying hence needs an accessible copy constructor ( copy elision may be applied).