深度探索C++对象模型第五章 构造、解构、拷贝语义学

原创 2002年07月01日 14:22:00

5.2  继承体系下的对象构造
一般而言编译器所做的扩充操作大约如下:
1、记录在initializataion list 中的data members 初始化裁做会被放进 constructor的函数本身,并以members 的声明顺序为顺序。
2、如果有一个member 没出现在member initialization list 之中,但是他又一个default constructor ,那么该default constructor 必须被调用
3、在这之前呢,如果class object 具有virtual table pointers,那么它们必须被设定处置,以指向适当的VTable
4、在那之前,所有的上一层的base class construcotors必须被调用,以base class 的声明顺序为顺序
 a) 如果base class 被列于member initialization list 之中, 那么任何明确制定的参数都被传递过去
 b) 如果base class 没又被列于member initialization list 之中,而它具有default constructor,那么会调用default construcotr
 c) 如果base class是多重继承下的第二或后继的base class,那么this 指针必须有所调整。
5、 在那之前,所有的virtual base class constructors 必须被调用, 从做到又,从最深到最浅。
 a) 如果 class 被列于member initialization list 之中, 那么任何明确制定的参数都被传递过去, 如果 class 没又被列于member initialization list 之中,而它具有default constructor,那么会调用default construcotr
 b) class 中的每一个virtual base class subject 的便宜量必须在执行期间可被存取
 c) 如果class object是最底层的class, 其constructors可能被调用,某些用以支持这个行为的机制必须被放进来!
VPTR的初始化时间:在base class construcotrs 调用操作之后,但是在程序员提供的member initialization list 被调用之前。所以在class 的member initialization list 中调用该class 的虚拟函数是安全的,但是未必是有意义的。因为其data member 还没有初始化啊!嘿嘿!

虚拟继承: virtual base class 只需要被初始化一次。添加一个辅助变量决定仅仅初始化一次!

深度探索C++对象模型-构造函数语义学

default constructor构建 default constructors在编译器需要的时候产生,区别于程序设计者的需要。以下程序进行说明: class A(public: int v;);...
  • isunn
  • isunn
  • 2015年04月19日 17:29
  • 878

【C++】深度探索C++对象模型之执行期语意学

执行期语意学,即在程序执行时,编译器产生而外的指令调用,确保对象的构造,内存的释放,以及类型转换与临时对象的生成的安全进行。 一、对象的构造和析构 对于类对象的构造,我们应该尽量在需要使用时才进行...
  • zone_programming
  • zone_programming
  • 2015年12月27日 11:10
  • 525

《深度探索c++对象模型》学习笔记

1、c++的布局和存取时间成本?封装并未给c++带来任何的空间或执行期的不良后果,c++在布局和存取时间上的主要额外负担由虚拟化引起。包括: 1)virtual function机制。用以支持一个有...
  • will130
  • will130
  • 2016年05月31日 15:48
  • 270

[读书笔记] 深入探索C++对象模型-第六章-执行期语义学(上)

继续整理第六章的内容,关于执行期的一些内容。 这一部分是关于对象的构造和析构的。注:以下部分图片来自于原文 1. 全局对象 C++中全局对象会被放到数据段中,一种可能的全局对象的初始化方法是在程序中最...
  • beyongwang
  • beyongwang
  • 2016年09月28日 22:47
  • 230

《深度探索C++对象模型》读书笔记第五章:构造、解构、拷贝语意学

纯虚基类尽量不要定义数据成员,如果定义了就需要在构造函数或其他成员函数设定初值,不过这通常是一种不好的设计。纯虚基类的纯虚函数可以在派生类中以静态方式调用。声明了纯虚析构函数就一定得定义它,为什么?因...
  • FreeeLinux
  • FreeeLinux
  • 2016年12月31日 02:36
  • 481

深度探索c++对象模型(一)_关于对象

原博客地址:http://www.roading.org//develop/cpp/c对象面面观.html 学习C++应该看过不少关于C与C++的口水贴,以及关于各种对比C与C++效率比较的...
  • A_IIIIIIIII_A
  • A_IIIIIIIII_A
  • 2016年01月04日 11:31
  • 567

[读书笔记] 深入探索C++对象模型-第一章《关于对象》

最新在看深入探索C++对象模型(Inside C++ object model),看的同时针对一些之前没有留意或者理解不深的内容整理一下读书笔记,方便之后复习,也希望可以帮助到有同样疑惑的人。 下面是...
  • beyongwang
  • beyongwang
  • 2016年08月21日 21:14
  • 637

《深度探索c++对象模型》读书笔记(一)

本文以下内容为深度探索c++对象模型的笔记 深度探索c++对象模型是Stanley B Lippman的著作,对c++进行了较深层次的探讨。于我而言,这本书解答了我多年(半年)的疑惑: 虚函数是怎...
  • cover_s
  • cover_s
  • 2016年08月30日 15:51
  • 589

C++对象模型简介(二)——《深度探索C++对象模型》精简笔记

叁 多重继承 class A { public: A() {} virtual ~A() {} virtual int foo( ) { return val ...
  • yang_yulei
  • yang_yulei
  • 2013年03月30日 23:48
  • 12125

深度探索C++对象模型:5.构造、析构、拷贝语意学

第五章:构造、析构、拷贝语意学 考虑下面这个abstract base class声明: class Abstract_base{ public:     virtual ~Abstract_...
  • walkerkalr
  • walkerkalr
  • 2014年01月10日 11:36
  • 1028
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度探索C++对象模型第五章 构造、解构、拷贝语义学
举报原因:
原因补充:

(最多只允许输入30个字)