Benefícios das listas de inicialização

O que eu sei sobre os benefícios de usar a lista de inicialização é que eles fornecem eficiência ao inicializar membros da classe que não são internos. Por exemplo,

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

é preferível a,

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

se x é um objeto de uma classe personalizada. Fora isso, este estilo é usado mesmo com tipos incorporados por uma questão de consistência.

O benefício mais comum de fazer isso é melhorar o desempenho. Se a expressão for do mesmo tipo que a variável de membro x_, o resultado de qualquer expressão é construído diretamente dentro de x_ - o compilador não faz uma cópia separada do objeto.

Com o outro estilo, a expressão faz com que um objeto temporário separado seja criado e esse objeto temporário é passado para o operador de atribuição do objeto x_. Então esse objeto temporário é destruído no. Isso é ineficiente.

Questão
Existe algum ganho de eficiência no exemplo a seguir com o uso da lista de inicialização. Eu acho que não há ganho. A primeira versão chama o construtor de cópia da string eo operador de atribuição da outra string de chamada (não existe nenhum temporário criado). Isso correto?

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

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

questionAnswers(6)

yourAnswerToTheQuestion