|This rule is Obsolete|
|Synopsis:||Use direct- instead of copy-initialization in object declarations of class type|
|Category:||Object Life Cycle|
An object obj of type T can be initialized with a value val as follows:
T obj = val; // copy-initialization, implicit T obj = T(val); // copy-initialization, explicit T obj(T(val)); // copy-initialization, explicit T obj(val); // direct-initialization
The direct-initialization form works for an arbitrary amount of constructor arguments.
The copy-initialization should not be used because it may require an additional construction of a temporary object that is used to invoke the copy-constructor of obj. The direct-initialization does not require such a copy-construction. Furthermore, the first form of copy-initialization is not possible if T's single argument constructors are declared as explicit as required by [INT#001]. Finally, T might not even have a copy-constructor, making direct-initialization the only choice.
|Ellemtel Rule 41|