Các mối đe dọa nhất của việc sử dụng việc thực hiện hoán đổi này là gì? Bên cạnh luồng an toàn và tối ưu hóa kém. Khi nào nó thất bại (counterexample)?Hoán đổi rất tàn bạo bằng cách sử dụng mẫu, xor và con trỏ tới bộ nhớ
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);
}
}
Xin lỗi cho những sai lầm ngữ pháp và lỗi chính tả (=
Điều này không đúng đối với các thành viên của con trỏ trừ khi bạn mở rộng về ý nghĩa của 'điều này sẽ thất bại'. –
@LucDanton Đã thêm vào câu trả lời – Praetorian
@Praetorian Ohh, tôi thích điều đó. Con trỏ sẽ giao điểm giữa các thành viên của các đối tượng hoán đổi. – shycha