Примеры того, когда побитовый обмен ()является плохой идеей?

Вы не должны рассматривать указатели объектов как указатели на необработанные двоичные данные в языках ООП, включая C++. Объекты «больше, чем» их представление.

Так, например, swapзамена двух объектов путем замены их байтов некорректна:

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));
}

Единственная ситуация, однако, в которой я могу представить, что этот ярлык вызывает проблему , — это когда объект содержит указатель на себя, что у меня бывает редко (никогда? )видел на практике; однако могут быть и другие сценарии.

Каковы некоторые реальные (реальные -мировые )примеры, когда правильный swapсломался бы, если бы вы выполнили побитовую замену?
Я могу легко придумать надуманные примеры с указателями на себя -, но я не могу придумать реальных -мировых.

7
задан Mehrdad 24 July 2012 в 19:49
поделиться