动态内存:程序执行时分配的内存,也称为自由空间和堆。
动态内存用来存储程序运行时动态分配的对象
动态对象的生存周期由程序控制
动态内存的使用存在两个问题:
1):内存泄漏:创建了,但是一直忘记shifang
2):引用非法指针:就是创建的对象已经释放了,但是还是有指针引用他。
为什么智能指针就能管理对象了?
智能指针:和普通指针的区别就是它负责自动的销毁和创建对象
标准库里的智能指针 在头文件#include<memory>中:
shared_ptr : 允许多个指针指向同一个对象。
unique_ptr :独占所指的对象。
- shared_ptr, unique_ptr, weak_ptr的区别?auto_ptr与shared_ptr的区别?weak_ptr主要是为了解决什么问题的?shared_ptr的内部实现?
1,shared_ptr, unique_ptr, weak_ptr的区别?
相同点:都是模板类
不同点:1、shared_ptr ,多个指针共享相同内存(多个指针指向相同的对象)引用计数为1到n个
unique_ptr,一个对象只有一个智能指针指向他。应用计数为1.
weak_ptr,不影响引用计数。在此对象的引用计数为零销毁后销毁
auto_ptr与shared_ptr的区别?
weak_ptr主要是为了解决什么问题的?
防止指针访问一个不存在的内存(一般都调用lock()函数实现)
- shared_ptr的内部实现?