关于多线程程序中的临时对象
About temporary objects in multithreaded program
假设我有保存一些数据的对象:
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 的文件上创建一个具有范围的虚拟对象。
这种方法在多线程环境中行不通,在多线程环境中每个线程都可以在不同的时间执行操作,这可能会导致麻烦。
如何处理多线程程序中的链式操作?
您对输入使用 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
将如预期的那样是 a
和 b
的经度之和。
由于 result
不是您担心的全局变量,因此 sum
可以在多线程环境中使用,只要不同的线程在不同的 a
和 b
同时.
假设我有保存一些数据的对象:
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 的文件上创建一个具有范围的虚拟对象。 这种方法在多线程环境中行不通,在多线程环境中每个线程都可以在不同的时间执行操作,这可能会导致麻烦。
如何处理多线程程序中的链式操作?
您对输入使用 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
将如预期的那样是 a
和 b
的经度之和。
由于 result
不是您担心的全局变量,因此 sum
可以在多线程环境中使用,只要不同的线程在不同的 a
和 b
同时.