智能指针
个人理解,智能指针是用来管理动态内存的,动态内存也就是堆内存,程序用它来存储动态分配的对象,即程序在运行的时候分配的对象。
除了动态内存,还有静态内存和栈内存,静态内存用来保存局部 static 对象,类 static 数据成员和定义在函数之外的变量;栈内存用来保存定义在函数内的非 static 对象。
静态内存和栈内存由编译器自动分配和释放,而动态内存由程序员手动分配和释放。例如:使用 new 可以在动态内存中为对象分配空间并返回指向该对象的指针,使用 delete 接受一个动态对象的指针,销毁该对象并释放动态内存。
动态内存的使用很容易出问题,因为确保在正确的时间释放内存是极其困难的。其中很容易出现两种问题:一种是忘记了释放内存,这是就会产生内存泄漏;另一种是还有指针在引用内存的时候释放了它,这时就会产生引用非法的指针。