Passando por Valor e copiando a otimização de elis
Eu me deparei com o artigohttp://cpp-next.com/archive/2009/08/want-speed-pass-by-value/
Conselho do Autor:
Não copie os argumentos da sua função. Em vez disso, passe-os por valor e deixe o compilador fazer a cópia.
No entanto, eu não entendo quais benefícios são obtidos nos dois exemplos apresentados no artigo:
//Don't
T& T::operator=(T const& x) // x is a reference to the source
{
T tmp(x); // copy construction of tmp does the hard work
swap(*this, tmp); // trade our resources for tmp's
return *this; // our (old) resources get destroyed with tmp
}
vs
// DO
T& operator=(T x) // x is a copy of the source; hard work already done
{
swap(*this, x); // trade our resources for x's
return *this; // our (old) resources get destroyed with x
}
Em ambos os casos, uma variável extra é criada, então onde estão os benefícios? A única vantagem que vejo é se o objeto temp é passado para o segundo exemplo.