在单独的函数中交换指针

时间:2016-09-21 09:11:06

标签: c++ pointers

我的数据仅限于名为struct的{​​{1}}:

transfer_data

我有指向该数据的向量:

struct transfer_data{
    std::vector<int> data;
}

现在我的函数被修复为始终从一个指针的副本读取数据,而属于另一个指针的数据在第二个线程中处理。当数据处理完成时,第二个线程将第一个指针与第二个指针交换。

我想使用这种方法,以便在第二个线程完成处理时不会复制太多数据(> 1 MB),并避免竞争条件(第一个线程正在读取,第二个线程正在写入地方等)。因此,通过仅复制矢量,它应该更快。

我的问题是:如何在函数中交换非全局指针?如果我想为变量做这些,我写

transfer_data dat1, dat2;
transfer_data *ptr_dat1 = &dat1, *ptr_dat2 = &dat2;

为指针编写类似的东西时:

void switch(int &a, int &b)
{
    int tmp = a;
    a = b;
    b = tmp;
}

但如果我这样做,那么我只在本地切换指针值,而不是全局切换,即从函数返回意味着返回现状。
我该如何修复我的功能?或者我的方法有一个更根本的缺陷吗?

1 个答案:

答案 0 :(得分:1)

通过使用引用,您可以实现此目的。

void switch(transfer_data* &a, transfer_data* &b)

现在可以在函数内部更改作为参数传递的变量。当你在做什么

void switch(transfer_data* a, transfer_data* b)

存储地址的变量副本,因此原始变量不受影响。引用基本上是某个变量的别名(昵称),因此通过使用引用,您可以在函数体内修改它。

如果你想了解编译器如何实际实现引用,那么这是一个很好的starting point