智能指针遇到的一些解答
1. auto_ptr 不建议使用的原因:
auto_ptr 采用 copy 语义来转移指针资源,转移指针资源的所有权的同时将原指针置为 nullptr,这跟通常理解的 copy 行为是不一致的(不会修改原数据),而这样的行为在有些场合下不是我们希望看到的。
例如参考《Effective STL》第 8 条,sort 的快排实现中有将元素复制到某个局部临时对象中,但对于 auto_ptr,却将原元素置为 null,这就导致最后的排序结果中可能有大量的 null。
而现在 C++11 的对 move 语义的支持,使得这样的资源转移通常只会在必要的场合发生,
例如转移一个临时变量(右值)给某个 named variable(左值),
或者一个函数的返回(右值)
这也就是用 unique_ptr 代替 auto_ptr 的原因,
本质上来说,就是 unique_ptr 禁用了 copy,而用 move 替代。
2. 常用的 shared_ptr 和 unique_ptr 的手动析构,有两种方法,
1 2 3 | std::shared_ptr<std::string> foo( new std::string( "foo" )); // foo.reset(); foo = nullptr ; |
根据相关解释,两种方法是等效的,虽然智能指针可以无须我们手动析构对象,但是在遇到程序崩溃的时候,并不能及时帮助我们释放对象,这时我们就需要在崩溃处理中手动释放它们。
分类:
C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!