Beispiele, wann ein bitweiser Swap () eine schlechte Idee ist?

Sie sollten Objektzeiger nicht als Zeiger auf unformatierte Binärdaten in OOP-Sprachen, einschließlich C ++, behandeln. Objekte sind "mehr als" ihre Repräsentation.

So zum BeispielswapEs ist falsch, zwei Objekte durch Austauschen ihrer Bytes zu ersetzen:

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

Die einzige Situation jedoch, in der ich mir vorstellen kann, dass diese Abkürzung aProblem ist, wenn ein Objekt einen Zeiger auf sich selbst enthält, den ich in der Praxis selten (nie?) gesehen habe; Es kann jedoch auch andere Szenarien geben.

Was sind einige aktuelle (reale) Beispiele, wenn ein korrekterswap würde brechen, wenn Sie einen bitweisen Swap durchführen?
Ich kann mir leicht ausgedachte Beispiele mit Selbstzeigern einfallen lassen, aber mir fallen keine Beispiele aus der realen Welt ein.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage