Dict.CN 在线词典, 英语学习, 在线翻译

学海苦作舟,书山勤为径

留下点回忆

常用链接

统计

积分与排名

Denoise

English study

Web技术

数据压缩

一些连接

最新评论

编译器上面时候为我们生成默认构造函数?(C++)

C++标准中这么说:
对于类X,如果没有任何用户定义的构造函数,那么就会有一个默认构造函数被暗自声明出来;这种函数一般没有什么用。。。

不过实际上不是什么时候编译器都生成默认构造函数,但下面集中情况却一定会为我们生成默认构造函数:
1.类A中包含一个成员是另外一个类B,如果类B定义了默认构造函数。这个时候如果类A没有定义默认构造函数,编译器会暗自生成一个默认构造函数来调用调用类B的构造函数来初始化它。
2.类A从类B继承,类B带有默认构造函数,那么这个时候编译器会为类A合并默认构造函数来调用类B的默认构造函数。
3.类A中包含虚函数;如果类A没有定义默认构造函数,编译器会为类A合并默认构造函数,其目的是初始化虚函数表,这是因为C++的虚函数表是在运行的时候生成的,而这就是在每个类被初始化的时候。
4.如果类A是虚继承其基类B,编译器会为类A及其子类合并默认构造函数来初始化而定义偏移地址。

这里还加一条:
对于后面三点,如果类C中包含这样的类A,同1一样,编译器会合并默认构造函数。

posted on 2011-04-07 22:32 笨笨 阅读(2068) 评论(5)  编辑 收藏 引用 所属分类: C++

评论

# re: 编译器上面时候为我们生成默认构造函数?(C++) 2011-04-08 10:10 Kevin Lynx

基本上,就是“当需要的时候”,就会被生成。  回复  更多评论   

# re: 编译器上面时候为我们生成默认构造函数?(C++) 2011-04-08 10:33 笨笨

@Kevin Lynx
总结精辟。。。
  回复  更多评论   

# re: 编译器上面时候为我们生成默认构造函数?(C++) 2011-04-08 10:46 Kevin Lynx

@笨笨
不是我总结的,貌似是<Inside C++ object model>里有这么一句话。"when it's necessary"  回复  更多评论   

# re: 编译器上面时候为我们生成默认构造函数?(C++) 2011-04-08 14:33 JFFO

你要是自己写编译器,想它什么时候产生都行  回复  更多评论   

# re: 编译器上面时候为我们生成默认构造函数?(C++) 2011-04-08 21:47 cqm

不错。推荐一网站:http://www.zongheng.com/?refer=1418926  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理