• 2006-10-17

    inside the c++ object model 点滴三 - [C&C++]

        c++中的数据和函数在对象中的排布已经在一中图表表示,需要注意的是编译器自动为我们添加的vptr可能放在顶部或者底部,各个编译器有所不同.而类的复杂度和存取的效率都会因为使用了虚函数等特性而改变大.
       如
              X x;
              X *pt=&x;
               x.test;
              pt->test;
       这两者的存取速度谁快呢?如果X是一个derived class 而在其继承结构中有virtual base class,并且存取的是virtual base class中的member那么存在重大差异.
        另外说说point member pointer
        1 point-to-memebr-data(指向对象数据成员的指针)
         定义
             int Point3d::*pt=&Point3d::x;
          如果你取data member的地址,得到的是改成员在class中offset.
       (编译器要加 1 以区分如下情况 int Point3d::*pt=0)
       
         2 point-to-member-function
          定义
             double ( Point3d::*pmf)();
             pmf=&Point::x; // x为函数  pmf 为Point3d成员
             调用的话  (origin.*pmf)();
                       or (pt->*pmf)();   // origin pt 都为Point3d对象
           在虚函数机制中我们间接使用point-to-member-function调用也能够动态的选择函数.

        关于inline函数
           如果inline函数含有较多的局部变量和形式参数,那么要考虑以下这个函数的效率,此时的inline不一定效率高.(inline 产生大量临时变量)
       
    分享到:

    历史上的今天: