default construction
2024-09-02 04:39:40
- 4种情况下编译器会构造出nontrivial(有用)的构造函数
- 带有default construction的member class object
我们有两个class:
class Foo { public: Foo(), Foo(int) … };
class Bar { public: Foo foo; char *str;};- 则编译器会在Bar中合成一个默认的构造函数(看起来像这样):
Bar() { foo.Foo::Foo(); } - 当我们自己定义了Bar一个或以上的构造函数时,编译器会为我们扩张
每一个构造函数。比如我们自己定义:
Bar() { str = 0;}
则编译器就为我们扩张成:
Bar() { foo.Foo::Foo(); str = 0; } - 当有多个需要初始化的成员时,编译器会按照成员的声明次序来初始化成员
- 则编译器会在Bar中合成一个默认的构造函数(看起来像这样):
- 带有default construction的base class
- 声明或继承一个virtual function的class
- 一个virtual function table 会被编译器产生出来,内放class的virtual function 地址。
- 在每个class object中,一个额外的pointer member(vptr)会被编译器合成出来,内含
相关的class vtbl的地址。
- 带有一个virtual base class的class
对于virtual base class中的成员变量,derived class通过存放一个指针,指针中存放
着对应的基类,用这样的方式来访问virtual base class中的成员变量。
所以为了初始化这些指针,编译器会默认构造出或扩张nontrivial构造函数做这些初
始化的工作。
- 带有default construction的member class object
- c++新手常见的两个误解
- 任何class如果没有定义default constructor,就会被合成出来。
- 编译器合成出来的default constructor会明确设定class内每个
datamember的默认值。
这两个没有一个是真的
最新文章
- IOS开发基础知识--碎片10
- <;css篇>;关于页面的绝对定位与相对定位,且支持页面各元素自适应
- python求范数
- group by语句
- Python 基础语法(三)
- IOS学习经验总结--来自知乎网友
- 在应用程序中实现对NandFlash的操作
- append
- (转) How to install eclipse in ubuntu 12.04
- JQuery的两个each方法的注意点
- AFNetworking 用法详解
- China Azure中部署Kubernetes(K8S)集群
- 22.jQuery(实例)
- C语言 - 栈和单链表的实现
- ajax传输中文参数乱码,本地使用tomcat不乱码,liunx+weblogic乱码
- 多线程——newFixedThreadPool线程池
- connection reset by peer问题总结及解决方案
- 关掉Windows Firewall的PowerShell
- Eclipse QuickSear的插件的说明
- VS2010/MFC编程入门之四十二(MFC常用类:CString类)