首页 > 其他分享 >智能指针

智能指针

时间:2023-02-10 09:57:02浏览次数:26  
标签:int 智能 new shared unique ptr 指针

1、shared_ptr 共享的智能指针

1)shared_ptr 使用引用计数,每一个shared_ptr 的拷贝都指向相同的内存。在最后一个shared_ptr析构的时候,内存才会被释放。

2)不能将一个原始指针直接赋值给一个智能指针。错误写法:shared_ptr<int> p = new int(5); 正确写法:shared_ptr<int> p(new int(5)) ;

3)shared_ptr 默认的删除不支持数组对象,所以用shared_ptr 管理动态数组时,需要指定删除器。shared_ptr<int> pArray(new int[10], [](int * p){delete[] p;});

      也可以使用默认的删除器 shared_ptr<int> pArray(new int[10], default_delete<int[]>);

4)不要用一个原始指针初始化多个shared_ptr;不要在函数实参中创建shared_ptr。

2、unique_ptr 独占的智能指针

1)不允许通过赋值将一个unique_pt  赋值给另一个unique_ptr,不允许其他的智能指针共享其内部的指针。

2)可以通过函数返回给其他的unique_ptr,可以通过std:move来转移到其他的unique_ptr

3)c++14提供make_unique来创建unique_ptr。

4)unique_ptr 可以指向一个数组。 unique_ptr<int []> ptr(new int[10]);    ptr[9] = 9;

5)unique_ptr 在指定删除器的时候需要确定删除器的类型。

3、weak_ptr 弱引用的智能指针

1)weak_ptr 主要是为了监视shared_ptr的生命周期,它的构造不会增加引用计数,它的析构也不会减少引用计数。纯粹只是作为一个旁观者监视shared_ptr中管理的资源是否存在。

2)通过use_count()方法获得当前观察资源的引用计数;通过expired()方法判断所观测的资源是否已经被释放;通过lock方法获取所监视的shared_ptr。

 

标签:int,智能,new,shared,unique,ptr,指针
From: https://www.cnblogs.com/wyj510/p/17098267.html

相关文章