Quali sono le maggiori minacce nell'utilizzo di tale implementazione di swap? Oltre alla sicurezza del thread e alla scarsa ottimizzazione. Quando fallisce (controesempio)?Scambio molto brutale usando template, xor e puntatori alla memoria
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);
}
}
dispiace per gli errori di grammatica e di ortografia (=
Questo non è vero per i membri del puntatore a meno che non si espanda cosa significa "questo fallirà". –
@LucDanton Aggiunto alla risposta – Praetorian
@Praetorian Ohh, mi piace. I puntatori incroceranno i punti tra i membri degli oggetti scambiati. – shycha