《深入探索C++对象模型》阅读笔记1:关于对象

 2024-02-13 03:01:21  阅读 0

C++对象模型

本书使用 Point 类作为示例来解释对象模型的样子。 类定义如下:

class Point {
public:
  Point(float xval);
  virtual ~Point();
  float x() const;
  static int PointCount();
protected:
  virtual ostream& print(ostream& os) const;
  float _x;
  static int _point_count;
};

其对象模型如下:

c对象sql返回对象_探索c++对象模型_mvc模型层对象

C++模型

每个类首先会用一个表来存储每个虚函数的指针,而每个类中实际存储的就是一个指向该表的指针。

书中给出了一个例子。 类 X 有一个副本、a 和 foo()。 下面展示了其使用对象模型的转换过程:

X foobar() {
  X xx;  // _result.X::X();
  X* px = new X; // px = _new(sizeof(X)); if (px != 0) px->X::X();
  xx.foo(); // foo (&_result);
  px->foo(); // (*px->vtbl[2])(px); 
  delete px; // if (px != 0) { (*px->vtbl[1](px); _delete(px); }
  return xx; // return _result;
}

其中,vtbl[0]存储X::~X(),vtbl[1]存储X::foo()。

关键字差异关键字的目的是为了方便C程序员向C++部落迁移。

在 C++ 中合理使用 C 是当您想要将“复杂类的全部或部分”传递给 C 函数时。 声明可以封装数据并保证与C兼容的空间布局。仅以组合形式存在,注意不包括继承。对象的区别

要计算一个类占用了多少内存,一般来说,需要考虑:

标签: c++

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码