C++相对C而言,可能会出现的时空额外开销:
1.虚函数机制,动态邦定
2.虚基类
3.多重继承下的“一个derived class和其第二或者后继之base的转换”
virtual table中有一个指向class所关联的type_info object
对指针进行类型转换,大部分情况下并不改变一个指针所含的真正地址,他只影响“被指出的内存的大小和内容”的解释方式。
编译器合成default constructor的时候:
a .用户没有定义default constructor
b1.带有default constructor的成员class object(not pointer to class object)
b2.带有default constructor的base class
b3.带有virtual function的class
b4.带有virtual base class的class
如果没有提供copy constructor,则在必要时会生成一个default copy constructor(当class不展现出bitwise copy semantics
的时候),该copy constructor所做的事情:
1.对于内建类型,直接拷贝
2.对于自定义类型,递归调用
编译器合成default copy constructor的时候:
a .用户没有定义default copy constructor
b1.带有default copy constructor的成员class object(不管是明确申明的还是编译器合成的)
b2.带有default copy constructor的base class(不管是明确申明的还是编译器合成的)
b3.带有virtual function的class
b4.带有virtual base class的class
编译器合成default assignment operator的时候:
a .用户没有定义default assignment operator
b1.成员有default assignment operator
b2.基类有default assignment operator
b3.带有virtual function的class
b4.带有virtual base class的class
下列几种情况,都是调用的构造函数,而不是拷贝构造函数,也没有调用赋值操作符,或者类型转换函数
Copy c1(10);
Copy c2 = Copy(10);
Copy c3 = 10;
Copy c4 = (Copy)10;
下列情况,调用的时copy constructor而不是“operator=”
Copy c = c1;
必须使用成员列表的时候:
1.初始化一个reference member
2.初始化一个const member
3.调用base class的constructor,且它带有参数
4.调用member class的constructor,且它带有参数