Beneficios de las listas de inicialización

Lo que sé de los beneficios de usar la lista de inicialización es que proporcionan eficiencia al inicializar los miembros de la clase que no están integrados. Por ejemplo,

Fred::Fred() : x_(whatever) { }

es preferible a

Fred::Fred() { x_ = whatever; }

Si x es un objeto de una clase personalizada. Aparte de eso, este estilo se usa incluso con los tipos incorporados por motivos de coherencia.

El beneficio más común de hacer esto es un mejor rendimiento. Si la expresión que sea del mismo tipo que la variable miembro x_, el resultado de la expresión que sea se construye directamente dentro de x_, el compilador no hace una copia separada del objeto.

Con el otro estilo, la expresión que sea lo que hace que se cree un objeto temporal separado, y este objeto temporal se pasa al operador de asignación del objeto x_. Entonces ese objeto temporal se destruye en el. Eso es ineficiente.

Pregunta
¿Hay algún aumento de eficiencia en el siguiente ejemplo con el uso de la lista de inicialización? Creo que no hay ganancia. La primera versión llama al constructor de copia de la cadena y el otro operador de asignación de la cadena de la cadena (no se crea ninguna cosa temporal). Es eso correcto?

class MyClass
{
public:
    MyClass(string n):name(n) { }
private:
    string name;
};

class MyClass
{
public:
    MyClass(string n)
    {
        name=n;
    }
private:
    string name;
};

Respuestas a la pregunta(6)

Su respuesta a la pregunta