C++中智能指针使用的思考

智能指针主要是用于内存不容易管理的情况,最好不要胡乱使用。不要产生,所有裸指针都可替换为智能指针,将share_ptr用到底的想法。这些都是我曾经错误的想法…………下面说一下目前使用过程中的一些思考

智能指针要去考虑所有权的问题,所有权分为共享和独占,对应了shared_ptr和unique_ptr。

shared_ptr的坑

不要把裸指针全部替换为shared_ptr,这里面有很多的坑(参考链接)。shared_ptr 通常使用在共享权不明的场景,有可能多个对象同时管理同一个内存时。

指针作为函数参数

很多时候,函数的参数是个指针。这个时候就会面临选择困难症,这个参数应该怎么传,应该是 shared_ptr,还是 const shared_ptr&,还是直接 raw pointer 更合适。

只在函数使用指针,但并不保存
假如我们只需要在函数中,用这个对象处理一些事情,但不打算涉及其生命周期的管理,不打算通过函数传参延长 shared_ptr 的生命周期。
对于这种情况,可以使用 raw pointer 或者 const shared_ptr&。
即:
void func(Widget*);
void func(const shared_ptr&)
实际上第一种裸指针的方式可能更好,从语义上更加清楚,函数也不用关心智能指针的类型。

在函数中保存智能指针
假如我们需要在函数中把这个智能指针保存起来,这个时候建议直接传值。
void func(std::shared_ptr ptr);
这样的话,外部传过来值的时候,可以选择 move 或者赋值。函数内部直接把这个对象通过 move 的方式保存起来。
这样性能更好,而且外部调用也有多种选择。

总结

使用指针之前,考虑好所用指针的所有权和生命周期,它的用途到底是来干什么的,三思而后行,程序也就能优化一些,少一些bug。

参考链接:

https://www.cyhone.com/articles/right-way-to-use-cpp-smart-pointer/#comments
https://zhuanlan.zhihu.com/p/291770399

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值