C++ tips 1

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,且它带有参数 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值