一、智能指针
关于智能指针的引入
1、动态内存使用new和delete操作,一般情况下成对出现,需要显式操作(显式销毁)
2、动态分配内存常见问题,分配后未销毁(内存泄漏),销毁后还继续使用(访问非法内存,可能导致段错误)
3、。。
关于指针的概念
项目 | 描述 | 关键字 |
---|---|---|
裸指针 | 普通的指针,char* p,typeA* a等 | |
独占资源智能指针 | 单独占用资源, | unique_ptr |
共享资源智能指针 | 多个指针贡献资源,可以多个指针和资源关联,用引用计数来表示多关联关系 | shared_ptr |
共享资源的观察者 | 和贡献资源指针类似,但它不增加资源的引用技术 | weak_ptr |
废弃 | auto_ptr |
unique_ptr
1、单独占用资源;
2、unique_ptr指针的构建和初始化就是 RAII 思想 的体现,
具体为,离开unique_ptr指针的作用预,他所关联的资源将会自动释放(???具体怎么释放);
3、(move-only)只能从一个指针关联转移到另一个指针,
假设a,b都是unique_ptr类型的指针,他不能有类似 a=b 的操作,编译器不过;
shared_ptr
1、一种使用引用计数的资源维护手段,引用计数为0了,释放指针关联资源,引用计数有指针类内部维护。
2、创建shared_ptr时,将会在堆内分配资源大小的内存和控制快(控制资源的引用计数)的内存,
这两个内存不一定连续
3、使用 make_shared 创建指针可以使资源内存和控制快内存连续
weak_ptr
weak_ptr 需要和 shared_ptr 配合使用,
二、D/Q指针
1、二进制兼容性
某链接库有更新,直接替换库,而应用程序无需重新链接,,那么这个动态库是 二进制兼容的。
如果修改动态库,只需要重新链接,而无需对应用做任何其他修改,那么这个库就是 源码兼容的。