C++ 对象模型 学习笔记(1)
2014-07-09 21:54
609 查看
非静态的数据成员被配置在每一个类对象中,静态数据成员则被放在所有的类对象之外,静态的和非静态的成员函数也被放在所有的类对象之外。虚函数则以两个步骤支持:
每一个类产生出一堆指向虚函数的指针,放在虚函数表(vtbl)中。
每一个类对象增加一个虚指针(vptr),指向虚函数表。虚指针的指定和重制都由每一个类的构造,析构和拷贝赋值运算符自动完成。
C++程序的多态性,只有通过指针和引用来实现。
一个类对象的内存占用:
其非静态数据成员的总和大小。
加上任何由于对齐的需求而填补上去的空间。
加上为了支持virtual而由内部产生的任何额外负担。
关键字explicit,就是为了提供给程序员一种方法,来避免使单一参数的构造函数被当作转换运算符。
编译器会在下面四种情况下,生成默认构造函数:
其中一个成员类对象带有默认构造函数。
基类带有默认构造函数。
该类中含有虚函数。
该类带有一个虚基类
在三种情况下,会调用类的拷贝构造函数:
对一个类做明确的初始化,比如A a = x;
当对象被当作参数交给某个函数。
当函数返回一个类对象。
成员初始化列表:
引用成员
常量成员
当调用基类带参数构造函数。
当调用成员类的单参数构造函数
在构造函数成员初始化列表中的成员,初始化顺序比在显示用户初始化代码之前。
每一个类产生出一堆指向虚函数的指针,放在虚函数表(vtbl)中。
每一个类对象增加一个虚指针(vptr),指向虚函数表。虚指针的指定和重制都由每一个类的构造,析构和拷贝赋值运算符自动完成。
C++程序的多态性,只有通过指针和引用来实现。
一个类对象的内存占用:
其非静态数据成员的总和大小。
加上任何由于对齐的需求而填补上去的空间。
加上为了支持virtual而由内部产生的任何额外负担。
关键字explicit,就是为了提供给程序员一种方法,来避免使单一参数的构造函数被当作转换运算符。
编译器会在下面四种情况下,生成默认构造函数:
其中一个成员类对象带有默认构造函数。
基类带有默认构造函数。
该类中含有虚函数。
该类带有一个虚基类
在三种情况下,会调用类的拷贝构造函数:
对一个类做明确的初始化,比如A a = x;
当对象被当作参数交给某个函数。
当函数返回一个类对象。
成员初始化列表:
引用成员
常量成员
当调用基类带参数构造函数。
当调用成员类的单参数构造函数
在构造函数成员初始化列表中的成员,初始化顺序比在显示用户初始化代码之前。
相关文章推荐
- C++对象模型学习笔记(二)--默认构造函数
- C++对象模型学习笔记(二)--默认构造函数
- 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记
- 深度探索C++对象模型学习笔记——Function语意学
- C++ 对象模型 学习笔记(2)
- 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记
- C++对象模型学习笔记(一)
- 深度探索c++对象模型 学习笔记 chapter2-1 default constructor
- boolan——c++学习笔记之多态对象模型
- C++对象模型 学习笔记01
- C++对象模型学习笔记(二)--默认构造函数
- 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记
- C++对象模型学习笔记
- 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记
- 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记
- 深度探索c++对象模型学习笔记
- C++基础学习笔记----第十一课(类的静态成员、对象模型初步认识)
- 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记
- C++对象模型学习笔记
- 深入C++对象模型学习笔记 第3章 Data 语意学