पर टेम्पलेट, एक्सओआर और पॉइंटर्स का उपयोग करके बहुत क्रूर स्वैप स्वैप के ऐसे कार्यान्वयन का उपयोग करने के सबसे खतरे क्या हैं? थ्रेड सुरक्षा और खराब अनुकूलन के अलावा। यह कब विफल रहता है (counterexample)?मेमोरी
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);
}
}
व्याकरण की गलतियों के लिए क्षमा करें, और वर्तनी (=
पॉइंटर सदस्यों के लिए यह सच नहीं है जब तक कि आप 'यह असफल हो' का अर्थ नहीं उठाते हैं। –
@LucDanton उत्तर में – Praetorian
@Praetorian ओह, मुझे यह पसंद है। पॉइंटर्स स्वैप किए गए ऑब्जेक्ट्स के सदस्यों के बीच क्रॉस-पॉइंट होंगे। – shycha