生成一个C++对象的成本(2)

[cpp]

class Father   {   public:       int m_fMember;       static int m_sMember;       static void testSFunc(){}       void testFunc(){}       virtual void testVFunc(){}       Father(){m_fMember=1;}       virtual ~Father(){cout<<m_fMember<<endl;}   };  

我们生成一个Father对象,看看它的的内存布局是啥样的(同志们,这只是近似存储布局图,没有把编译和运行的差别放上去,下篇再讲这个):

生成一个C++对象的成本


 

这里大家明白了吧?即使一个Child对象在编译时被赋为Father类型,但是实际调用时,virtual方法会被单独的拎出来,在vtbl中指向实际的实现,所以,该对象在delete时会调用Child的析构函数,而如果你像上面例子那样,析构方法不使用virtual,将会用到上图中的最后一个指针,指向类成员函数里,这样就不是执行期绑定了。


剩下的static成员(还有所有的正常成员函数),都是与对象实例无关的内存布局。这样,其实如果不使用virtual,C++比之C并没有增加成本,尽可放心使用。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyggxg.html