关于多线程程序中的临时对象

时间:2018-04-02 10:40:06

标签: c++ multithreading temporary

假设我有持有一些数据的对象:

class myclass
{
  //constructors,destructor,setters,getters
  private:
  int latitude;
  int longitude;
} 

假设我需要对这些对象执行一些链式操作,因此我可以编写一些返回myclass对象的函数,以便在其他函数中使用。 例如:

myclass sum (myclass* a, myclass* b)
{
    // how to define c?
    c.longitude = a->get_longitude() + b->get_longitude();
    return c;
}

和另一个使用返回对象的函数:

int anotherfunc (myclass* a, myclass* b)
{
    return a->get_longitude() - sum(a,b).get_longitude();
}

问题是:我应该如何定义这些函数所需的对象c

第一个想法是在文件上创建一个带有作用域的虚拟对象来存储对象c。 这种方法虽然在多线程环境中不起作用,每个线程可以在不同时间执行操作,但可能会导致麻烦。

如何处理多线程程序中所述的链式操作?

1 个答案:

答案 0 :(得分:4)

您的输入使用const引用,输出是临时的:

// assume longitude and latitude public for sake of simplicity here
myclass sum(myclass const& a, myclass const& b)
{
    myclass result;
    result.longitude = a.longitude + b.longitude;
    result.latitude  = a.latitude  + b.latitude;
    return result;
}

int anotherfunc(myclass const& a, myclass const& b)
{
    return a.longitude - sum(a,b).longitude;
}

sum内部,函数构造,设置和返回临时myclass对象。此临时对象几乎可以用作表达式中的标准对象,例如,sum(a,b).longitude将是ab经度的总和。 / p>

由于result不是全局的,因此您可以在多线程环境中使用sum,只要不同的线程可以在不同的a和{{1}上工作在同一时间。