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)避免裸指针与智能指针混用
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)避免裸指针与智能指针混用
全部评论
相关推荐