21xrx.com
2024-12-22 19:48:51 Sunday
登录
文章检索 我的文章 写文章
C++三种智能指针介绍
2023-07-02 10:44:19 深夜i     --     --
C++ 智能指针 强引用计数指针 弱引用计数指针 唯一指针

智能指针是一种特殊类型的指针,它可以在指针所指向的内存空间不再需要使用时自动释放。C++语言提供了三种系统智能指针:unique_ptr、shared_ptr和weak_ptr,下面将对这三种智能指针进行详细介绍。

1. unique_ptr

unique_ptr是一种独占式智能指针,它会自动管理动态分配的内存,并确保内存资源的所有权在程序的生命周期中只有一个对象持有。当unique_ptr对象超出作用域或者被销毁时,它所管理的内存资源也会被自动释放。

unique_ptr采用模板类实现,可以管理任意类型的动态内存分配。例如,通过以下代码可以创建一个unique_ptr对象并管理一个int类型的动态内存:


std::unique_ptr<int> ptr(new int(10));

2. shared_ptr

shared_ptr是一种共享式智能指针,它可以多个智能指针对象同时管理同一块动态内存,并且可以对内存资源进行引用计数,只有当所有的引用计数都为0时,才会自动释放内存资源。

shared_ptr也采用模板类实现,可以管理任意类型的动态内存分配。例如,通过以下代码可以创建一个shared_ptr对象并管理一个int类型的动态内存:


std::shared_ptr<int> ptr(new int(10));

3. weak_ptr

weak_ptr是一种弱引用式智能指针,它可以解决shared_ptr的循环引用问题。weak_ptr对象可以从一个已存在的shared_ptr对象中构造而成,但是它没有直接访问资源的能力,而是需要通过lock()成员函数获取可用的shared_ptr对象。

例如,通过以下代码可以创建一个weak_ptr对象并从已存在的shared_ptr对象中构造:


std::shared_ptr<int> sptr(new int(10));

std::weak_ptr<int> wptr(sptr);

总结:三种智能指针各有优缺点,在不同的场景下应用。unique_ptr最适合用于独占式的内存管理,shared_ptr则适合用于多个指针共享同一块内存空间并需要对内存资源进行引用计数的情况,而weak_ptr则解决了shared_ptr存在的循环依赖问题。在实际使用中,应根据需要灵活选择使用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章