尽量避免在大多数代码中使用指针实现。
使用现代C ++,您几乎不需要传递指针,可以依赖引用,并且编译器本身可以进行优化以避免不必要的复制和自动转移所有权。但不总是。
智能指针的用例仍然存在。如果必须动态创建对象并将其返回到调用堆栈,则希望它们在超出范围时释放自己。如果找不到确定的位置来删除对象,或者无法确定要删除该对象的对象,那么智能指针是一个很好的解决方案。
unique_ptr的一些优点是:
您知道您的smart_ptr将持续存在,直到不再位于任何范围内,并且没有函数或类会意外地将其销毁。
整个代码路径中指向的对象将只有一个销毁。
unique_ptr并不是一个真正的指针,它的行为就像一个透明的指针,将调用转发到它所连接的对象。它不能“悬挂”并且不能为空。
unique_ptr的开销几乎与原始指针相同,即几乎没有。没有使用原始指针的加速。
shared_ptr用于由多个线程,对象等共享(更震惊!)的资源。它们在时间和内存上的使用比unique_ptr昂贵,但是它们解决了在使用对象的函数结束时保持活动对象的难题。他们为我们提供了一个参考计数器和原子访问。在垃圾回收语言中,引用计数由运行时线程保留,但C ++ shared_ptr保留其引用计数。在大多数程序中,shared_ptr的用例少于unique_ptr。
如何避免使用智能指针泄漏:
通常,他们为您完成工作,