C++ 智能指针

智能指针是C++中用于自动管理动态分配内存的模板类,它们帮助防止内存泄漏,并在适当的时候自动释放内存。C++11标准引入了以下几种主要的智能指针:

1. std::unique_ptr
独占所有权:同一时间只能有一个unique_ptr指向特定对象
轻量高效:几乎无额外开销
不可复制,但可以通过std::move转移所有权

2. std::shared_ptr
共享所有权:多个shared_ptr可以指向同一对象
引用计数:内部维护引用计数器,当计数为0时释放内存
可复制,适合共享访问的场景

3. std::weak_ptr
弱引用:不增加引用计数,不控制对象生命周期
用于解决shared_ptr的循环引用问题
必须转换为shared_ptr才能访问对象

4.最佳实践
(1)优先使用std::make_unique和std::make_shared而非直接new:
更安全(避免内存泄漏)
更高效(特别是对于shared_ptr)

(2)选择原则:
需要独占所有权时用unique_ptr
需要共享所有权时用shared_ptr
需要观察但不拥有时用weak_ptr

(3)避免裸指针与智能指针混用
全部评论

相关推荐

笔试通过后约的面试,之前实习经历不是开发相关的,面试时也没怎么问过往实习。对c++17和20之后特性了解多吗?用过哪些智能指针,说说各自使用场景。share_ptr底层实现。(答了什么场景下会创建shared_ptr的control block),描述enable_shared_from_this的工作原理Stl常见容器有哪些?底层用什么实现的?C++编译过程(预处理编译汇编链接),动态链接静态链接有了解吗?有什么区别?内存对齐目的?回答现场给的结构体的sizeof内存泄漏有遇到过吗说一下?你是如何解决的?new和malloc区别?malloc会用哪两种系统调用,有什么区别?(mmap和brk)操作系统的线程进程协程区别?强制类型转换有哪几种?空类大小,为什么?描述下空基类优化禁止某种不需要调用的函数怎么实现编译期间就可以进行检查?(用=delete)你知道哪些实际场景例子吗?比如thread的复制构造函数高数学了哪些?(因为投量化所以简历扯了下高中拿过数物菜鸡省奖)说一下罗尔,拉格朗日,柯西中值定理?柯西中值定理的证明。答构造一个辅助函数然后用罗尔定理证明,具体构造啥样的辅助函数忘了Linux熟练吗?常用命令哪些?查看当前性能的命令?(htop,netstat)Python装饰器用过吗?有哪些使用场景(胡答了下用于记录日志和计算函数运行时间)Python还问了些其他的但记不起来了给百来行的cpp程序,说哪个位置有误(充当下人工编译器)以及可改进优化之处手撕力扣mid
查看18道真题和解析
点赞 评论 收藏
分享
评论
4
3
分享

创作者周榜

更多
牛客网
牛客企业服务