C++笔记

1、类模板可以有偏特化和全特化,函数模板只有全特化,没有偏特化,因为函数可以用重载实现类型的变化
特化的概念是在类型层面的
全特化指的是这个类模板或者函数模板的类型在定义的时候就固定了,调用的时候不能改变。
偏特化指的是类模板的全部参数或者部分参数的类型在定义时没有固定,在调用的时候再确定。举例,vector<这里的类型是可以变的,没有被固定> vec;

2、new关键字在使用的时候,经过的过程有,分配内存、构造对象、返回这个对象的指针
delete是调用析构函数、释放内存
operator new和placement new
operator new用来分配内存
placement new不负责分配内存,在已分配的内存上,调用构造函数构造对象

3、typename和class在类模板、结构体模板和函数模板里的区别
他们的用法基本相同template和template
但是在T有子类的时候,在需要使用T的子类来创建对象时,只能用(typename T::子类名 对象名)来创建子类对象,用class会报语法错误

4、使用类的前向声明,在编译的时候不需要将完整的头文件加载进来,节省了时间,但是只能在指针或引用类型上使用类前置声明

5、using可以用于声明命名空间,类似于using namespace std;
using可以类似于typedef的用法,但是又比typedef多了一种功能,就是typedef不能使用在template中,而using可以

6、四大智能指针:
auto_ptr:是C++98的智能指针,已被C++11摒弃,用unique_ptr代替,因为不够安全,auto_ptr在赋值时会拷贝语义,导致指向对象的原指针失效,而unique_ptr禁止了拷贝语义,引入了移动语义,即可以使用std::move()进行所有权权限的转移
unique_ptr:引入了所有权的概念,只允许一个unique_ptr指向一个对象,unique_ptr禁止拷贝语义,即不允许赋值()或者=,引入了移动语义操作std::move(),如果unique_ptr是临时右值,编译器允许拷贝,unique_ptr可放在容器中使用,auto_ptr不能放。
shared_ptr:是一个标准的共享所有权的智能指针,允许多个指针指向同一个对象,定义在 memory 文件中,命名空间为 std。使用引用计数,当引用计数为0时才会删除指向的对象
weak_ptr:weak_ptr 被设计为与 shared_ptr 共同工作,可以从一个 shared_ptr 或者另一个 weak_ptr 对象构造而来。weak_ptr 是为了配合 shared_ptr 而引入的一种智能指针,它更像是 shared_ptr 的一个助手而不是智能指针,因为它不具有普通指针的行为,没有重载 operator* 和 operator-> ,因此取名为 weak,表明其是功能较弱的智能指针。它的最大作用在于协助 shared_ptr 工作,可获得资源的观测权,像旁观者那样观测资源的使用情况。观察者意味着 weak_ptr 只对 shared_ptr 进行引用,而不改变其引用计数,当被观察的 shared_ptr 失效后,相应的 weak_ptr 也相应失效。
weak_ptr 最大的用处就是用于打破shared_ptr的循环引用。

7、用函数改变变量内容,要想改变普通变量的内容,使用一级指针或引用作为函数参数,要想改变一级指针的内容,使用二级指针作为函数参数,依次类推。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值