============================================================================
2-0. 关键字explicit被引入C++,提供给程序员一种方法,使他们能够制止“单一参数的constructor”被当做一个conversion运算符。

============================================================================
2-1.Default Constructor的建构操作:
“default constructor...在需要的时候被编译器产生出来”。关键字眼是“在需要的时候”,被谁需要?做什么事情? 期间的差别在于是程序的需要,还是编译器的需要。程序如果有需要,那是程序员的责任,此时并不会合成出一个default constructor。只有当编译器需要它的时候,才会合成它,并且被合成出来的constructor只执行编译器所需的行动。一个nontrivial default constructor就是“编译器所需要”的那种,必要的话会由编译器合成出来。下面讨论nontrivial default constructor的四种情况:
(1)带有“Default Constructor”的Member Class Object。

(2)“带有Default Constructor”的Base Class。

 

(3) “带有一个Virtual Function”的Class。

(4) “带有一个Virtual Base Class”的Class。

总结:

============================================================================
2-2. Copy Constructor的建构操作
有三种情况,会以一个object的内容作为另一个class object的初值。
(1)明确地以一个object的内容作为另一个class object的初值;
(2)当object被当作参数交给某个函数时;
(3)当函数传回一个class object时;

Default Memberwise Initialization
如果class没有提供一个explicit copy constructor时,当class object以“相同class的另一个object”作为初值时,其内部是以所谓的default memberwise initialization手法完成的,也就是把每一个內建的或派生的data member(例如一个指针或一数目组)的值,从某个object拷贝一份到另一个object身上。不过它并不会拷贝其中的member class object,而是以递归的方式施行memberwise Initialization。如下:


Bitwise Copy Semantics(位逐次拷贝)

============================================================================
2-3. 程序转化语意学

============================================================================
2-4. 成员的初始化

============================================================================

Inside The C++ Object Model(二)的更多相关文章

  1. C++学习书籍推荐《Inside the C++ Object Model》下载

    百度云及其他网盘下载地址:点我 作者简介 Stanley B. Lippman is Architect with the Visual C++ development team at Microso ...

  2. inside the C++ Object model总结

    一. 关于对象 1.内联函数:能够除去函数调用的开支,每一处内联函数的调用都是代码的复制.这是一种空间换取时间的做法,若函数代码量大或者有循环的情况下,不宜内联(这件事有些编译器会自动帮你做).在类中 ...

  3. 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记

    转载:http://dsqiu.iteye.com/blog/1669614 第一章 关于对象 使用class封装之后的布局成本: class并没有增加成本,data members直接内含在每一个c ...

  4. Inside The C++ Object Model - 03

    object Lessons 1.C++中布局以及存取时间上的的额外负担是由virtual引起的:virtual function.virtual base class.或是由于多继承引起的. 2.C ...

  5. Inside The C++ Object Model(五)

    ============================================================================5-0. 一般而言,class 的data me ...

  6. Inside The C++ Object Model(四)

    ============================================================================4-1. Member 的各种调用方式静态成员函 ...

  7. Inside The C++ Object Model(三)

    ============================================================================3-0. 类所占的内存大小受到三个因素的影响:( ...

  8. Inside The C++ Object Model(一)

    ============================================================================1-1. 关键字struct和class的一点区 ...

  9. Inside The C++ Object Model - 04 C++对象模型的一个简单示例

    首先定义一个类X class X { public: X(); X(const X& x); virtual ~X(); virtual foo(); } 再来一段代码: X foobar() ...

随机推荐

  1. GPS信号不足情况下,如何用GPRS模块根据基站进行定位

    AT+CREG=2                            //设置参数,2为返回详细信息,包含基站的地区区域码和基站码 注意:GPRS命令后面都要有回车 AT+CREG? 下面为返回值 ...

  2. Hibernate(6)关联关系_单向n对1

    1.单向 n-1 关联只需从 n 的一端可以访问 1 的一端 2.实体类 n端:Order.java public class Order { private Integer orderId; pri ...

  3. [赶集网] 【MySql】赶集网mysql开发36条军规

    [赶集网] [MySql]赶集网mysql开发36条军规 (一)核心军规(1)不在数据库做运算   cpu计算务必移至业务层:(2)控制单表数据量   int型不超过1000w,含char则不超过50 ...

  4. Linux内存管理学习资料

    下面是Linux内存管理学习的一些资料. 博客 mlock() and mlockall() system calls. All about Linux swap space 逆向映射的演进 Linu ...

  5. WordPress主题开发:按分类调用文章

    调用catid为2的分类下的文章,就是后台分类链接的tag_ID <?php $cat_query = new WP_Query(array( 'cat' => '2' )); ?> ...

  6. Git删除本地分支和远程分支

    https://blog.csdn.net/sub_lele/article/details/52289996 git branch help λ git branch -h usage: git b ...

  7. 【PMP】项目管理ITTO概述

    1.项目整合管理

  8. Python内置的urllib模块不支持https协议的解决办法

    Django站点使用django_cas接入SSO(单点登录系统),配置完成后登录,抛出“urlopen error unknown url type: https”异常.寻根朔源发现是python内 ...

  9. 关于CALayer导致的crash问题

    push到一个页面进行绘图时,设置如下: CALayer * layer = [CALayer layer]; layer.frame = CGRectMake(, , , ); layer.dele ...

  10. 10分钟上手图数据库Neo4j

    随着互联网不断的发展,传统的关系型数据库如oracle,mysql已经难以支撑现下大数据量,高并发的场景了.于是,NoSQL横空出世,有像cassandra这样的column-based,像Mongo ...