美文网首页
C++面向对象高级编程 第五周 博览网

C++面向对象高级编程 第五周 博览网

作者: 我要飞翔_2520 | 来源:发表于2017-05-18 14:51 被阅读0次

C++对象模型

  • (32位系统中)对于类成员如果是空类占1个字节,如果有虚函数,每个虚函数会有一个vptr指针占4个字节,如果有静态类成员变量,其在global date memory中,在类实例化中不单独占用内存。类的成员函数不占用类的大小。
    类在内存中占用的空间与成员变量的顺序也有关系。同时遵循数据对齐原则。
  • 如果函数没有使用关键字virtual修饰,则程序将根据对象、引用类型或指针类型调用函数。如果使用virtual修饰函数则程序将根据引用或者指针 指向的对象类型 进行选择方法。但是将函数定义成virtual会增加程序的空间和时间开销。在基类方法的声明中使用关键字virtual可是该方法在基类以及所有的派生类(包括从派生类派生出来的类)中是虚的。
    每一个包含虚函数的类都有一个隐含的vptr指针(不论有几个虚函数都只有一个指针),指向vtbl(虚函数表,有几个虚函数虚函数表就包括几个函数指针),而虚函数表指向具体的实现函数的入口地址。
  • 为基类声明一个虚析构函数是一种惯例(除非它不做基类),这样可以确保释放派生对象时按正确的顺序调用析构函数。如果虚构函数不是虚的则指挥调用指针类型的析构函数,而不会调用指针指向的类型的析构函数,这样会出现错误
  • 在派生类中的虚函数调用基类的同名虚函数时需要使用基类类名域作用符,否则会出现无限循环调用。
  • 成员函数的const 和non-const版本构成函数的重载;但是返回值类型不构成重载。当成员函数同时存在两种版本时,const object只能调用const版本,non-const object只能调用non-const版本。
  • new表达式的作用步骤:
    1.调用operator new或者operator new[]标准库函数,分配内存空间
    2.运行相应构造器构造对象
    3.返回指向该对象的指针
  • delete表达式的作用步骤:
    1.对指针指向的对象执行析构函数
    2.调用名为operator delete或者operator delete[]的库函数释放内存空间。
  • 因为new发生的对象构造之前,delete发生在对象销毁之后,所以这两个重载的成员函数都是隐式静态的,他们不能操作类的任何数据成员。
    关于new与delete的重载
new_delete_1.png new_delete_2.png new_delete_3.png

相关文章

网友评论

      本文标题:C++面向对象高级编程 第五周 博览网

      本文链接:https://www.haomeiwen.com/subject/hsusxxtx.html