标签:模型 UNC 存在 支持 member class 产生 nstat assign
一、C++对象模型
在C++的对象模型中,nonstatic data members被放在每个class object之中,static data members仅存在一份实例,被单独放置在class ojbect之外,static 和 nonstatic function members 也仅存在一份实例,被放置在class object之外。对于virtual functions则以两个步骤来支持:
1.每个class 产生一堆指向virtual function的指针,放在一个表格之中,该表格称为virtual table(vtbl)
2.每一个class object被安插一个指针,指向相关的virtual table,该指针称为vptr。vptr的设定和重置是由class 的constructor,destructor,copy assignment自动完成的。每一个class所关联的type info object(用于支持runtime type identification)也是由virtual table指出,通常放在表格的第一个slot。
以以下的代码为例:
class Point { public: Point(); virtual ~Point(); float x() const; static int PointCount(); virtual ostream& Print(ostream& os)const; private: float x; static int POINT_COUNT; };
class Point的对象模型是这样的:
标签:模型 UNC 存在 支持 member class 产生 nstat assign
原文地址:https://www.cnblogs.com/along4396/p/11953467.html