1

我想问这种交换实现是否可行:

 void swap (void* &a, void* &b ) 
 {    
     void * tmp = a;
     a=b;
     b=tmp;
 }

int main() 
{
   void * a;
   void * b;   
   swap (a,b);
   return 0;
}

我是否需要以某种方式将对象的大小发送到交换方法并使用它?如果是这样,那么这个功能的一个好的实现是什么?

4

3 回答 3

2

对我来说看起来不错(指针只是一个指针,所以它指向的东西的大小并不重要),但为什么不直接使用std::swap呢?

在这个例子中,你搞乱了未初始化的变量,这很糟糕,但这似乎不是你问题的重点。

于 2013-07-10T21:50:05.057 回答
1

有用。我不确定它是否像您认为的那样:指针值被交换,而不是它们指向的任何东西。

于 2013-07-10T21:49:22.147 回答
1

这个函数可以很好地交换void指针;编译器知道它们的大小。如果你想交换void指针以外的东西,你需要一个不同的函数。

编辑:但这是交换模板函数的一般模式:

template <class Ty>
void swap(Ty& lhs, Ty& rhs) {
    Ty tmp = lhs;
    lhs = rhs;
    rhs = tmp;
}
于 2013-07-10T21:49:57.977 回答