在C ++中交换void *指针

时间:2013-07-10 21:46:39

标签: c++ swap void void-pointers

我想问一下这种交换实现是否有效:

 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方法并使用它?如果是这样,那么这个函数的优秀实现是什么?

3 个答案:

答案 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;
}