为了账号安全,请及时绑定邮箱和手机立即绑定

指针,智能指针或共享指针?

指针,智能指针或共享指针?

C++
Smart猫小萌 2019-11-22 11:11:08
我正在使用普通指针进行编程,但是我听说过诸如Boost之类的实现智能指针的库。我还看到,在Ogre3D渲染引擎中,共享指针得到了广泛的使用。这三个之间到底有什么区别,我应该坚持只使用它们中的一种吗?
查看完整描述

3 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

术语“智能指针” 包括共享指针,自动指针,锁定指针等。您的意思是说自动指针(更模糊地称为“拥有指针”),而不是智能指针。

哑指针(T *)永远不是最佳解决方案。它们使您可以进行显式的内存管理,这是冗长的,容易出错的,有时几乎是不可能的。但更重要的是,它们并不表示您的意图。

自动指针将销毁的指针删除。对于数组,更喜欢像vector和deque这样的封装。对于其他对象,很少需要将它们存储在堆上-只需使用局部变量和对象组合即可。返回堆指针的函数仍然需要自动指针,例如工厂和多态返回。

当指向该指针的最后一个共享指针被破坏时,共享指针将删除该指针。当您需要一个不费吹灰之力的开放式存储方案时,此功能很有用,该方案的预期寿命和所有权可能会因情况而异。由于需要保留(原子)计数器,因此它们比自动指针要慢一些。有人开玩笑地说,共享指针适用于无法设计系统的人-自行判断。

对于共享指针的必要替代,也可以查找弱指针。


查看完整回答
反对 回复 2019-11-22
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

智能指针在超出范围后会自行清理(从而消除了对大多数内存泄漏的担心)。共享指针是智能指针,它保留该指针存在多少个实例的计数,并且仅在计数达到零时才清理内存。通常,仅使用共享指针(但请确保使用正确的指针-数组使用不同的指针)。他们与RAII有很多关系。


查看完整回答
反对 回复 2019-11-22
  • 3 回答
  • 0 关注
  • 565 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信