Navigation

    CFD中文网

    CFD中文网

    • Login
    • Search
    • 最新

    OF中关于tmp类型变量的运算和使用

    OpenFOAM
    3
    4
    2592
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      Aeronastro last edited by

      我在OF源码中看到tmp类型的变量运算,比如tmp<volSymmTensorField> LL = (一个场), volSymmTensorField MM(......); 然后 LL && MM就可以计算。我之前看到到tmp,理解成一个指针,用于大数据量的场的赋值中,优化内存。但这样的话,LL&&MM我感觉不太理解了,一个指针和一个场怎么能运算呢?而且用tmp的话,要和new对应使用吧?

      如果定义返回值类型为tmp的函数,在函数体中就用到了new,这个我是理解的,难道定义一个tmp类型的变量就不用new了么?像tmp<volSymmTensorField> LL =(一个场)这样?

      谢谢各位的指教!

      W 1 Reply Last reply Reply Quote
      • C
        CFD中文网 last edited by

        如果简单的把tmp里面成为一个指针会很困难。tmp更像一个类的宏定义。如果将tmp看做一个类的话,各种问题迎刃而解。所有你可以L & M,也可以tmp<scalarField> S = class->S()。tmp的优点在于可以防止大量拷贝复制。然而代码非常底层。我更倾向优雅的使用它并忽略它的实现。

        CFD中国标准用户测试帐号
        目前由徐笑笑登录

        1 Reply Last reply Reply Quote
        • W
          wwzhao 教授 @Aeronastro last edited by

          @Aeronastro

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

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

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

          A 1 Reply Last reply Reply Quote
          • A
            Aeronastro @wwzhao last edited by

            @wwzhao 好贴:cheeky:

            1 Reply Last reply Reply Quote
            • First post
              Last post

            CFD中文网 | 东岳流体 | 京ICP备15017992号-2
            论坛登录问题反馈可联系 li.dy@dyfluid.com