Korzyści z list inicjalizacyjnych

Z tego, co wiem o zaletach korzystania z listy inicjalizacyjnej, jest to, że zapewniają one wydajność podczas inicjowania elementów klasy, które nie są wbudowane. Na przykład,

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

lepiej jest,

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

jeśli x jest obiektem klasy niestandardowej. Poza tym ten styl jest używany nawet w przypadku typów wbudowanych ze względu na spójność.

Najczęstszą korzyścią jest zwiększenie wydajności. Jeśli wyrażenie jest tym samym typem, co zmienna składowa x_, wynik tego wyrażenia jest konstruowany bezpośrednio w x_ - kompilator nie tworzy osobnej kopii obiektu.

W innym stylu wyrażenie cokolwiek powoduje utworzenie oddzielnego, tymczasowego obiektu, a ten tymczasowy obiekt jest przekazywany do operatora przypisania obiektu x_. Następnie ten tymczasowy obiekt jest niszczony na; To nieefektywne.

Pytanie
Czy w poniższym przykładzie istnieje jakikolwiek przyrost wydajności przy użyciu listy inicjalizacji. Myślę, że nie ma zysku. Pierwsza wersja wywołuje konstruktor kopiowania ciągów, a drugi wywołuje operator przypisania ciągu znaków (nie ma żadnych tymczasowych kreacji). To prawda?

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