Exemplos de quando um swap bitwise () é uma má idéia?
Você não deve tratar os ponteiros de objeto como ponteiros para dados binários brutos em linguagens OOP, incluindo C ++. Objetos são "mais do que" sua representação.
Então, por exemplo,swap
dois objetos trocando seus bytes está incorreto:
template<class T>
void bad_swap(T &a, T &b) // Assuming T is the most-derived type of the object
{
char temp[sizeof(T)];
memcpy(temp, &a, sizeof(a));
memcpy(&a, &b, sizeof(b));
memcpy(&b, temp, sizeof(temp));
}
A única situação, no entanto, em que eu posso imaginar este atalho causando umproblema é quando um objeto contém um ponteiro para si mesmo, o qual eu raramente (nunca?) vi na prática; pode haver também outros cenários.
Quais são alguns exemplos reais (do mundo real) de quando umswap
iria quebrar se você realizou uma troca bit a bit?
Eu posso facilmente criar exemplos planejados com auto-ponteiros, mas não consigo pensar em nenhum mundo real.