深入理解C++对象模型默认构造函数笔记
来源:互联网 发布:火车票生成器软件 编辑:程序博客网 时间:2024/05/16 04:54
2.Global object 的内存保证会在程序激活的时候被清为0.Local objects 配置于程序的堆栈中,heap object 配置于自由空间
中,都不一定会被清为0,它们的内容将是内存上次被使用后的遗迹.
有四种情况,会导致"编译器必须为未声明constructor之class合成一个default constructor".
C++standard把那些合成物称为implicit nontrivial default constructors,被合成出来的constructor只能满足编译器(而非程序)
的需要.(编译器通过插入一些代码来合成).
它之所以能够完成任务,是借着
1."调用member object 或 2.base class 的default construtor
" 或是"
3.或是为每一个object初始化其virtual funciton机制 ( vptr, vtbl)
或
4.virtual base class 机制"而完成的. (__vbcX指向虚基类的指针).
至于没有存在那四种情况而又没有声明任何constructor 的calsses我们说它们拥有的是implicit trivial default constructors,
他们实际上并不会被合成出来.;
在合成的default constructor中,只有 base class subobjects 和 member class objects 会被初始化.(我理解的初始化意思,是调用他们的相应construcor).所有其他的nonstatic data memember,如整数,整数指针,整数数组等等都不会初始化.这些初始化操作对程序而言或许有需要,但对编译器则并非必要.如果程序需要一个" 把某指针设为0"的default construcor,那么提供它的人应该是程序员.
C++新手会犯的错误:
1.任何class 如果没有定义default constructor,就会被合成出一个来.(我的理解是编译器实实在在插入一些代码).
2.编译器合成出来的defualt constructor 会明确设定"class 内每一个 data member 的默认值".
如你所见,没有一个是真的.
- 深入理解C++对象模型默认构造函数笔记
- 深入理解C++对象模型之构造函数
- 深入理解C++对象模型之拷贝构造函数
- C++对象模型学习笔记(二)--默认构造函数
- C++对象模型学习笔记(二)--默认构造函数
- C++对象模型--默认构造函数
- 深入探索C++对象象模型--拷贝构造函数、对象模型
- C++对象模型之默认构造函数的构造操作
- c++对象模型-默认构造函数的构造操作
- C++默认构造函数——深入理解
- C++默认构造函数——深入理解
- C++默认构造函数——深入理解
- C++默认构造函数——深入理解
- C++默认构造函数——深入理解
- C++默认构造函数——深入理解
- c++对象模型笔记之构造函数
- 《深度探索C++对象模型》(一)对象模型、存储形式;默认构造函数一定会构造么?
- 《深度探索C++对象模型》- 编译器合成默认构造函数
- 实现VB与MySQL的连接
- JAVA基础知识精华总结(转载)
- ASP.NET 2.0个性化配置(profile)
- Google App Engine之初窥(大杂烩-了解先)
- windows编程——画键盘
- 深入理解C++对象模型默认构造函数笔记
- windows编程——滚动条
- VB数据库编程实现添加、查询、修改、删除
- asp.net 2.0异步页面
- 遍历一个实例的所有属性,得到属性的名称和值
- Time Zone
- 设计软件测试用例的思考
- ASP.NET 委托,异步调用例子
- Flex、Java、C#、JavaFX的事件处理机制的比较