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的优点在于可以防止大量拷贝复制。然而代码非常底层。我更倾向优雅的使用它并忽略它的实现。


  • 版主

    @Aeronastro

    1. 很多操作符都对 tmp<> 类型进行重载了,因此 tmp<> 类型的对象可以直接使用这些操作符进行相应的操作。

    2. tmp<> 类型封装的变量可以是用 new 申请的对象(存储堆内存上),也可以不是(存储在栈内存上):http://marinecfd.xyz/openfoam-tmp

    3. tmp<volSymmTensorField> LL = 调用的是拷贝构造函数,因此右边也应该是 tmp<volSymmTensorField>



  • @wwzhao 好贴:cheeky:


登录后回复
 

与 CFD 中国 的连接断开,我们正在尝试重连,请耐心等待