Вы не должны рассматривать указатели объектов как указатели на необработанные двоичные данные в языках ООП, включая 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
сломался бы, если бы вы выполнили побитовую замену?
Я могу легко придумать надуманные примеры с указателями на себя -, но я не могу придумать реальных -мировых.