您不应该将对象指针视为OOP语言(包括C++)中原始二进制数据的指针.对象"超过"它们的表示.
因此,例如,swap通过交换字节来处理两个对象是不正确的:
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));
}
Run Code Online (Sandbox Code Playgroud)
然而,唯一的情况是,我可以想象这个导致问题的快捷方式是当一个对象包含一个指向自身的指针时,我很少(从不?)在实践中看到它; 但是,也可能是其他情景.
swap如果你执行按位交换,什么是正确会破坏的实际(真实世界)示例?
我可以很容易地用自我指针提出人为的例子,但我想不出任何真实的例子.