1问:为什么要引入智能指针?智能指针有哪些,具体实现方式与应用场景是什么?
答:引入原因:C++开发过程中需要频繁使用堆内存,但易因未释放造成内存泄漏,智能指针可以改善这种问题,在超出其作用域后自动进行释放。
常见的智能指针:std::shared_ptr,std::unique_ptr,和std::weak_ptr,std::auto_ptr(C++ 11已被废弃);
std::shared_ptr:多个指针指向相同的对象,shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存,每使用一次,内部引用计数就增加1,每析构一次,内部引用计数就减少1,当引用计数减少到0时,自动删除所指向的堆内存,shared_ptr内部引用计数时线程安全的,但对象的读取需要加锁;
unique_ptr:独享所有权,unique_ptr对象始终关联的时原始指针的唯一所有者,无法复制unique_ptr对象,只能移动
weak_ptr:不具有普通指针的行为,没有重载*和->方法,主要协助shared_ptr使用,观察资源的使用情况,weak_ptr可以从shared_ptr或者weak_ptr对象构造,获取资源的观测权,但weak_ptr没有共享