C++随记

1. 虚表对象的虚表指针用来指向自己所属类的虚表,虚表中的指针会指向其继承的最近的一个类的虚函数。虚表是属于类的,而不是属于某个具体的对象;

        一个类只需要一个虚表即可。同一个类的所有对象都使用同一个虚表。为了让每个包含虚表的类的对象都拥有一个虚表指针,编译器在类中添加了一个指针,*__vptr,用来指向虚表。这样,当类的对象在创建时便拥有了这个指针,且这个指针的值会自动被设置为指向类的虚表。

        我们把经过虚表调用虚函数的过程称为动态绑定,其表现出来的现象称为运行时多态。动态绑定区别于传统的函数调用,传统的函数调用我们称之为静态绑定,即函数的调用在编译阶段就可以确定下来了

2. 左值:指表达式结束后依然存在的持久对象,可以取地址,具名变量或对象 
    右值:表达式结束后就不再存在的临时对象,不可以取地址,没有名字

     eg : 比如 int a = b + c;,a 就是一个左值,可以对a取地址,而b+c 就是一个右值,对表达式b+c 取地址会报错。

  • 所有的右值引用叠加到右值引用上仍然还是一个右值引用;
  • 所有的其他引用类型之间的叠加都将变成左值引用。

总之是,所有的右值引用叠加到右值引用上仍然是一个右值引用,其他引用折叠都是左值引用。

T& &、T& &&和T&& & 都折叠成类型 T& 
T&& &&折叠成 T&&.

3. 理解std::move和std::forward

4. 移动构造函数的参数和拷贝构造函数不同,拷贝构造函数的参数是一个左值引用,但是移动构造函数的初值是一个右值引用。意味着,移动构造函数的参数是一个右值或者将亡值的引用。也就是说,只用用一个右值,或者将亡值初始化另一个对象的时候,才会调用移动构造函数。

        而对于指针参数来讲,需要注意的是,移动构造函数和拷贝构造函数是对传递参数进行一次浅拷贝,所以当变量是指针的时候,要将指针置为空,这样在调用析构函数的时候会进行判断指针是否为空,如果为空则不回收指针的地址空间,这样就不会释放掉前一个指针。

5.对于模板类或者模板函数来说,一般而言都是要求声明和定义全都要放在同一个头文件的,而不能分离到头文件和CPP文件中。当然,这只是一般而言.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值