1.转型其实是一种编译器指令, 大部分情况下它并不改变一个指针所含的真正地址,它只影响"被指出之内存的大小和内容"的解释方式.
2.Global objects的内存保证会在程序启动的时候被清为0, Local objects配置于程序的堆栈中, Heap objects配置于自由空间中, 都不一定会被清为0, 它们的内容将是内存上次被使用后的遗迹.
eg.
class test
{
       int a ;
       int b ;
       int c ;
};
test g_obj ;
void main ()
{
    test l_obj ;
    test *h_obj = new test();
}
对象g_obj中变量均被初始化为0, l_obj和h_obj中变量均未被初始化.
3.以下情况下编译器会生成默认构造函数:
1)带有默认构造函数的成员变量
eg.
class object
{
public:
    object()
        : val(0)
    {
    }
private:
    int val ;
};
 
class test
{
private:
    object obj ;
};
 
void main ()
{
    test t ;
}
vs中DEBUG我们可以看到对象t定义,编译器生成了test的默认构造函数
调用构造函数进行了一次跳转
具体构造函数体,函数内调用了对象object的构造函数
2)基类带有默认构造函数
3)带有虚函数的类对象
4)带有虚继承的类对象
4.拷贝构造函数不会直接进行字节拷贝操作情况.
1)当类内含一个成员变量是类对象,而后者类内声明有一个拷贝构造函数
2)当类继承自一个含有拷贝构造函数基类
3)当类声明了一个或多个虚函数
4)当类的继承体系中存在一个虚继承时.
5.构造函数初始化列表中成员变量初始化的顺序是以成员变量在类中的声明顺序进行的,并不是以初始化列表中的顺序进行初始化.
6.MSVC中对象的虚函数指针放在对象的头端,如下:
虚函数表中正向索引为虚函数, 负索引为虚基类的偏移量.
7.对象构造函数进行操作
1)调用base class constructor,顺序为从最底层到上层;
2)设定virtual table ptr;
3)按照成员在类中的声明顺序,初始化member initialization list中所列的成员;
4)调用用户所写代码;
8.析构函数进行操作;
1)调用destructor中用户代码首先执行;
2)class中拥有member class objects,且拥有destructors,则以声明的顺序相反的顺序被调用;
3)对象中含有virtual table ptr,则会被重新设定为适当的基类的虚函数表指针;
4)如果有任何直接的nonvirtual base classes 拥有destructor它们会以其声明顺序的相反顺序被调用;
5)如果任何virtual base classes拥有destructor,而当前讨论的这个class是最尾端的class,那么它们会以其原来的构造顺序的相反顺序被调用.

《深度探索C++对象模型》学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. php curl request

    /** * @desc curl request请求 * @date 2016-12-07 16:26:55 * * @param $arguments * * @return bool|mixed ...

  2. python获取系统时间

    import time print time.time() 输出的结果是: 1279578704.6725271 但是这样是一连串的数字不是我们想要的结果,我们可以利用time模块的格式化时间的方法来 ...

  3. 编写jQuery插件--实现返回顶部插件

    国庆过去一周多了,作为IT界的具有严重’工作狂‘性质的宅人,居然还没走出玩耍的心情,拖了程序猿的脚后跟了.最近工作不顺,心情不佳,想吐槽下公司,想了还是厚道点,以彼之道还施彼身,觉得自己也和他们同流合 ...

  4. Logback 简单使用

    1.Logback为取代log4j而生 Logback是由log4j创始人Ceki Gülcü设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- cl ...

  5. SQL Server 修改排序规则

    Net stop mssqlserver Setup /QUIET /ACTION=REBUILDDATABASE /instancename=mssqlserver /SQLSYSADMINACCO ...

  6. win10应用安装位置修改方法

    win10应用安装位置怎么改?很多用户升级win10的系统之后,对于win10应用装置的位置如何修改一直不知道如何解决,今天,小编就跟大家一起来看看如何修改win10应用装置的位置. win10应用安 ...

  7. 上下切换js

    <div class="wview"> <span class="prevs" id="prevs-j"></ ...

  8. linux挂载详解

    一 .linux文件结构 文件结构是文件存放在磁盘等存贮设备上的组织方法.主要体现在对文件和目录的组织上.目录提供了管理文件的一个方便而有效的途径. linux使用标准的目录结构,在安装的时候,安装程 ...

  9. BT5之配置笔记

    BT5本来就是用Ubuntu 10.04做得蓝本,所以,我在配置BT5的时候,基本上都是按照Ubuntu 10.04的配置方法,在配置BT5 1    系统基本设置 1.1  安装Ubuntu10.0 ...

  10. java中获得jar包执行路径的方法

    当我们由于某种需要需要的得到jar的路径是可以用下面的方式来获得: basePath = new Solution().getClass().getProtectionDomain().getCode ...