我想问一下这种交换实现是否有效:
void swap (void* &a, void* &b )
{
void * tmp = a;
a=b;
b=tmp;
}
int main()
{
void * a;
void * b;
swap (a,b);
return 0;
}
我是否需要以某种方式将对象的大小发送到swap方法并使用它?如果是这样,那么这个函数的优秀实现是什么?
答案 0 :(得分:2)
对我来说很好看(指针只是一个指针,所以它所指向的东西的大小无关紧要),但为什么不只使用std::swap?
在这个例子中,你正在搞乱未初始化的变量,这很糟糕,但这似乎不是你问题的主要观点。
答案 1 :(得分:1)
有效。我不确定它是否符合你的想法:指针值是交换的,而不是它们所指向的。
答案 2 :(得分:1)
此函数适用于交换void
指针;编译器知道它们的大小。如果你想交换void
指针以外的东西,你需要一个不同的功能。
编辑:但这是交换模板功能的一般模式:
template <class Ty>
void swap(Ty& lhs, Ty& rhs) {
Ty tmp = lhs;
lhs = rhs;
rhs = tmp;
}