我的数据仅限于名为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;
}
但如果我这样做,那么我只在本地切换指针值,而不是全局切换,即从函数返回意味着返回现状。
我该如何修复我的功能?或者我的方法有一个更根本的缺陷吗?
答案 0 :(得分:1)
通过使用引用,您可以实现此目的。
void switch(transfer_data* &a, transfer_data* &b)
现在可以在函数内部更改作为参数传递的变量。当你在做什么
void switch(transfer_data* a, transfer_data* b)
存储地址的变量副本,因此原始变量不受影响。引用基本上是某个变量的别名(昵称),因此通过使用引用,您可以在函数体内修改它。
如果你想了解编译器如何实际实现引用,那么这是一个很好的starting point。