Przykłady, kiedy bitowa zamiana () jest złym pomysłem?
Nie należy traktować wskaźników obiektów jako wskaźników do surowych danych binarnych w językach OOP, w tym C ++. Obiekty są „więcej niż” ich reprezentacją.
Na przykładswap
dwa obiekty przez zamianę ich bajtów są nieprawidłowe:
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));
}
Jedyna sytuacja, w której mogę sobie wyobrazić ten skrót powodujący aproblem jest wtedy, gdy obiekt zawiera wskaźnik do siebie, który rzadko (nigdy?) widzę w praktyce; mogą jednak istnieć inne scenariusze.
Jakie są rzeczywiste przykłady poprawnościswap
zepsułoby się, gdybyś przeprowadził bitową zamianę?
Mogę łatwo wymyślić wymyślne przykłady z własnymi wskaźnikami, ale nie potrafię wymyślić żadnych rzeczywistych.