Was sind die meisten Bedrohungen für die Verwendung einer solchen Implementierung von Swap? Neben Fadensicherheit und schlechter Optimierung. Wann schlägt es fehl (Gegenbeispiel)?Sehr brutaler Austausch mit Vorlage, XOR und Zeiger auf den Speicher
template<typename T>
void swapViaMemory(T& left, T& right) {
if(&left == &right) { return ; }
unsigned int tSize = sizeof(T);
unsigned char* lPtr = reinterpret_cast<unsigned char*>(&left);
unsigned char* rPtr = reinterpret_cast<unsigned char*>(&right);
for(unsigned int i = 0; i < tSize; ++i) {
*(lPtr + i) ^= *(rPtr + i);
*(rPtr + i) ^= *(lPtr + i);
*(lPtr + i) ^= *(rPtr + i);
}
}
Sorry für Grammatikfehler und falsche Schreibweisen (=
Dies gilt nicht für Zeiger-Member, es sei denn, Sie erweitern, was "dies wird fehlschlagen" bedeutet. –
@LucDanton Zur Antwort hinzugefügt – Praetorian
@Praetorian Ohh, das mag ich. Zeiger werden zwischen den Mitgliedern der vertauschten Objekte kreuzen. – shycha