c – 通过引用传递scoped_ptr(在一个类中从一个方法到另一个方法)是一种好习惯吗?

前端之家收集整理的这篇文章主要介绍了c – 通过引用传递scoped_ptr(在一个类中从一个方法到另一个方法)是一种好习惯吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_1@或者,如果我需要这样做,那么我应该只使用shared_ptr?

解决方法

如果被调用者不需要存储包装指针,并且只是使用它来调用某些方法,那么通过引用传递scoped_ptr是安全的. scoped_ptr保护的对象将在超出范围时被销毁 – 如果指针是堆栈变量,则在调用函数的末尾,或者如果它是成员变量,则取消分配包含的类实例.

通常,智能指针用于管理对象所有权,所以这里是一个快速运行:

> boost :: scoped_ptr将受保护对象的生命周期限制在封闭范围内,只有一个所有者.
>使用std :: auto_ptr,一次只有一个所有者,但它允许通过赋值传递所有权(作为函数参数或返回值.)
> boost :: shared_ptr通过引用计数支持共享所有权,只有当引用计数变为零时才会销毁受保护对象.这是最通用的智能指针,但也是最昂贵的,因为它遭受了一些小的开销(引用计数通过原子操作来维护,这相当昂贵.)还存在循环依赖的可能性.
> boost :: weak_ptr是一个非拥有的智能指针,可以在运行时升级到boost :: shared_ptr,并检查被保护对象是否仍然存活.

还有像boost :: shared_array这样的数组变体,因为C对单个和多个对象有单独的释放函数(operator delete与operator delete [].)

智能指针支持Resource Acquisition Is Initialization或RAII,这是一种提供exception safety guarantees方法.

猜你在找的C&C++相关文章