《深度探索C++对象模型》1
C++对象模型:
多重继承模型示意:
第二章:构造函数 语意学
基类和派生类:
Bear yogi;
ZooAnimal franny=yogi;
在这里,很容易理解合成的copy构造函数将vptr指向基类的虚函数表,不然不仅造成数据切割(sliced),函数调用也混乱了。
返回值的初始化:
在下述四种情况下必须使用成员初始化列表:
上面的产生临时string效率很低,修改后可以提高:
在构造函数中可以使用成员函数来对数据成员进行初始化:
这是因为(可以在构造函数中使用成员函数的原因):
简单来说,编译器对成员初始化列表的处理:
第三章:Data语意学
一个空class对象占1字节:
影响虚继承类对象大小3因素:
而在visual C++:
类的静态数据成员,存放在程序的全局data section。
非静态数据成员:
将不相干的class凑成一对,并带有继承关系(只要继承不要多态):
将不相干的class凑成一对,并带有继承关系(只要继承不要多态)容易犯错:
犯第二个错的原因是编译器需要保留对齐空间,否则复制时出现覆盖:
单一继承含虚函数对象布局:
多重继承数据布局:
虚拟继承数据布局:
指向数据成员的指针:
《深度探索C++对象模型》1的更多相关文章
- 1<<33这种写法是错的!!!
1<<33不能这么写,1默认int类型,应该改为(long long)1<<33
- mysql 5.6.33 重置密码后报错
[root@ Desktop]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; o ...
- 【C语言】++(a++)的写法是错的
http://bbs.csdn.net/topics/390764053 a++得到的是一个右值,++操作需要的是一个左值. ------------------------------------- ...
- [C语言]易错知识点、小知识点复习(1)
1. 计算机只能识别由0和1组成的二进制指令,需要将用高级语言(如C.C++)编写的源程序(.c..cpp)编译成二进制目标文件(.obj).一个程序可以根据需要写在不同的文件里,编译是以文件为单位进 ...
- js自执行函数的几种不同写法的比较
经常需要一个函数自执行,可惜这一种写法是错的: function(){alert(1);}(); 原因是前半段“function(){alert(1);}”被当成了函数声明,而不是一个函数表达式,从 ...
- 菜鸟的Xamarin.Forms前行之路——从新建项目到APP上架各种报错问题解决方法合集(不定时更新)
出自:博客园-半路独行 原文地址:http://www.cnblogs.com/banluduxing/p/7425791.html 本文出自于http://www.cnblogs.com/banlu ...
- django migrate报错:1005 - Can't create table xxx (errno: 150 "Foreign key constraint is incorrectly formed")
自从mysql升级,以及使用mariaDB以来,很多不曾更新django中model的外键, 今天,按以前的思路写完外键之后, migrate命令报错: 1005 - Can't create tab ...
- 《C++primer》v5 第2章 变量和基本类型 读书笔记 习题答案
2.1 int,long long ,short 可表示范围和占用内存空间不同.具体与计算机有关. 无符号类型只能表示0和正数,带符号类型可以表示负数,0,正数. float是单精度,一般占用4个字节 ...
- Go第七篇之规范的接口
接口本身是调用方和实现方均需要遵守的一种协议,大家按照统一的方法命名参数类型和数量来协调逻辑处理的过程. Go 语言中使用组合实现对象特性的描述.对象的内部使用结构体内嵌组合对象应该具有的特性,对外通 ...
- 作为一个新手的Oracle(DBA)学习笔记【转】
一.Oracle的使用 1).启动 *DQL:数据查询语言 *DML:数据操作语言 *DDL:数据定义语言 DCL:数据控制语言 TPL:事务处理语言 CCL:指针控制语言 1.登录 Win+R—cm ...
随机推荐
- shapely and geos break在distance方法
问题 from shapely.geometry import Point print Point(0,0).distance(Point(1,1)) 报错 python: GeometryCompo ...
- iOS 导航控制器返回栈中的某一控制器
#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...
- iOS 自定义UITabBarController的tabBar
#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDeleg ...
- example of Python http server
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler print "hello " class TestHTT ...
- ASP.NET MVC Filter
http://stackoverflow.com/questions/6940371/asp-net-mvc-request-filters http://afana.me/post/aspnet-m ...
- tengine安装lua
转子: http://www.cnblogs.com/shengshuai/p/4244851.html 参考: http://www.ttlsa.com/nginx/nginx-lua/ 学习:ht ...
- NLS_LANG参数说明
NLS_LANG参数说明 格式: NLS_LANG = language_territory.charset 它有三个组成部分(语言.地域和字符集),每个成分控制了NLS子集的特性.其中: Lang ...
- SQLSERVER:通过sys.tables实现批量删表、快速统计多表记录和
SQLSERVER:通过sys.tables实现批量删表,或者回滚表 begin try drop table #temp10 end try begin catch end catch select ...
- Lintcode: Singleton && Summary: Synchronization and OOD
Singleton is a most widely used design pattern. If a class has and only has one instance at every mo ...
- nyist 62 笨小熊
http://acm.nyist.net/JudgeOnline/problem.php?pid=62 笨小熊 时间限制:2000 ms | 内存限制:65535 KB 难度:2 描述 笨小熊 ...