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. PHPExcel说明

    下面是总结的几个使用方法include 'PHPExcel.php';include 'PHPExcel/Writer/Excel2007.php';//或者include 'PHPExcel/Wri ...

  2. cms开发笔记2

    1 创建数据库表 //配置文件CREATE TABLE IF NOT EXISTS `mc_config` ( `en_name` varchar(80) NOT NULL, `ch_name` va ...

  3. ecshop会员中心增加订单搜索功能

    在user.php中的act=order_list中增加以下程序. $order_sn = isset($_REQUEST['order_sn'])?$_REQUEST['order_sn']:''; ...

  4. stream的Read、Write方法实例

    , bytes.Length)) > ) , readBytes-);//8为偏移量,10为数量                    }                }            ...

  5. windows下STM32开发环境的搭建

    一.概述 1.说明 笔者已经写了一篇Linux下STM32开发环境的搭建 ,这两篇文章的最区别在于开发环境所处的系统平台不一样,而其实这个区别对于开发环境的搭建其实影响不大,制作局部上的操作上发生了改 ...

  6. Quartz Sheduler 入门

    Quartz Sheduler 入门 原文地址:http://www.quartz-scheduler.org/generated/2.2.2/html/qtz-all/ 下载地址:http://qu ...

  7. 开发错误日志之FTP协议传输文件问题

    从开发端用FTP协议向服务器(Linux系统)传输文件时,cat -A查询文件内容中行尾会有^M出现. 解决方案:改用SFTP协议上传文件.

  8. hadoop 存储空间满了

    -- ::, WARN mapred.LocalJobRunner - job_local_0001 org.apache.hadoop.util.DiskChecker$DiskErrorExcep ...

  9. [转载]C#.NET中Dns类的常用方法及说明

    IP是一种普遍应用于因特网.允许不同主机能够相互找到对方的寻址协议.IP地址由4个十进制的数字号码所组成,而每一个号码的值介于0~255之间,它虽然解决了网络上计算机的识别问题,但是IP地址确不容易记 ...

  10. 【win8技巧】win8一键截图自动保存到文件夹

    以前截图都是按着键盘的PrtSc键,但是这个只是保存到剪贴板,还需要粘贴才行. 现在win8可以直接使用 Win + PrtSc 进行全屏截图,不仅保存到剪贴板,而且自动保存到[库]--[图片]--[ ...