OF中关于tmp类型变量的运算和使用
-
我在OF源码中看到tmp类型的变量运算,比如tmp<volSymmTensorField> LL = (一个场), volSymmTensorField MM(......); 然后 LL && MM就可以计算。我之前看到到tmp,理解成一个指针,用于大数据量的场的赋值中,优化内存。但这样的话,LL&&MM我感觉不太理解了,一个指针和一个场怎么能运算呢?而且用tmp的话,要和new对应使用吧?
如果定义返回值类型为tmp的函数,在函数体中就用到了new,这个我是理解的,难道定义一个tmp类型的变量就不用new了么?像tmp<volSymmTensorField> LL =(一个场)这样?
谢谢各位的指教!
-
如果简单的把tmp里面成为一个指针会很困难。tmp更像一个类的宏定义。如果将tmp看做一个类的话,各种问题迎刃而解。所有你可以
L & M
,也可以tmp<scalarField> S = class->S()
。tmp的优点在于可以防止大量拷贝复制。然而代码非常底层。我更倾向优雅的使用它并忽略它的实现。 -
-
很多操作符都对
tmp<>
类型进行重载了,因此tmp<>
类型的对象可以直接使用这些操作符进行相应的操作。 -
tmp<>
类型封装的变量可以是用new
申请的对象(存储堆内存上),也可以不是(存储在栈内存上):http://marinecfd.xyz/openfoam-tmp -
tmp<volSymmTensorField> LL =
调用的是拷贝构造函数,因此右边也应该是tmp<volSymmTensorField>
。
-
-
@wwzhao 好贴:cheeky:
2016年5月28日 06:51
1/4
2016年10月30日 11:12