您的位置:首页 > 编程语言 > C语言/C++

C++ 对象模型 学习笔记(1)

2014-07-09 21:54 609 查看
非静态的数据成员被配置在每一个类对象中,静态数据成员则被放在所有的类对象之外,静态的和非静态的成员函数也被放在所有的类对象之外。虚函数则以两个步骤支持:

每一个类产生出一堆指向虚函数的指针,放在虚函数表(vtbl)中。
每一个类对象增加一个虚指针(vptr),指向虚函数表。虚指针的指定和重制都由每一个类的构造,析构和拷贝赋值运算符自动完成。
C++程序的多态性,只有通过指针和引用来实现。

一个类对象的内存占用:

其非静态数据成员的总和大小。
加上任何由于对齐的需求而填补上去的空间。
加上为了支持virtual而由内部产生的任何额外负担。

关键字explicit,就是为了提供给程序员一种方法,来避免使单一参数的构造函数被当作转换运算符。

编译器会在下面四种情况下,生成默认构造函数:

其中一个成员类对象带有默认构造函数。
基类带有默认构造函数。
该类中含有虚函数。
该类带有一个虚基类
在三种情况下,会调用类的拷贝构造函数:

对一个类做明确的初始化,比如A a = x;
当对象被当作参数交给某个函数。
当函数返回一个类对象。
成员初始化列表:

引用成员
常量成员
当调用基类带参数构造函数。
当调用成员类的单参数构造函数
在构造函数成员初始化列表中的成员,初始化顺序比在显示用户初始化代码之前。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: