C++11教程
+ -

C++11 std::shared_ptr指针

2023-06-06 9 0

std::shared_ptr形如其名,允许多个该智能指针共享地拥有同一堆分配对象的内存指针。
与std::unique_ptr不同的时,为了共享地拥有同一堆分配对象的内存指针,std::shared_ptr内部采用引用计数的方式来实现,所以一旦某一个std::shared_ptr反映针放弃了“所有权”(失效),其它的shared_ptr对对像内存的引用并不会受到影响。

如以下代码:

#include<memory>
using namespace std;

void fun(std::shared_ptr<int> ptr)
{

}

int _tmain(int argc, _TCHAR* argv[])
{
    std::shared_ptr<int> p1(new int(10));
    std::shared_ptr<int> p2 = p1;
    fun(p2);
    return 0;
}

在初始化时,p1引用计数加1 ,p2赋值初再次加1,按“值”传给fun函数时,再次引用加1。

shared_ptr的实现类似于comm接口,当引用计数为0时,才真正的删除内存。

0 篇笔记 写笔记

ReactOS 根据名称获取对象指针ObReferenceObjectByName
ObReferenceObjectByName在Windows中是一个未文档化的函数,其功能是通过名称获取对象指针。其函数原型为:NTKERNELAPINTSTATUSNTAPIObReferenceObjectByName ( _In_ PUNICODE_STRING Object......
DUILIB消息机制-类指针传递
Duilib的窗口均是通过CreateWindowEx函数来创建的,其函数原型如下:HWND CreateWindowEx( DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, ......
C/C++技巧 公用体函数指针
使用公用体函数存储函数的类型,使用一个枚举来传递函数的类型。这样结合for case等语法,可以巧妙地进行底层封装。例如MFC的消息响应就是这样的,只是多了一个宏而已。 union FUN{Void (*pFun)();Void (*pFun2)(int );bool(*pFun3)(in......
C++11 std::uniqure_ptr指针
C++98引入模板类型”auto_ptr”来实现内存的自动释放,不过由于auto_ptr在拷贝时返回一个左值,不能调用 delete[]等,所以在C++11时被废弃。有废弃就有增加,C++11采用unique_ptr,shared_ptr,weak_ptr等智能指针来自动回收堆分配的对象。uniq......
C++11 std::shared_ptr指针
std::shared_ptr形如其名,允许多个该智能指针共享地拥有同一堆分配对象的内存指针。与std::unique_ptr不同的时,为了共享地拥有同一堆分配对象的内存指针,std::shared_ptr内部采用引用计数的方式来实现,所以一旦某一个std::shared_ptr反映针放弃了“所有权......
C++11 std::weak_ptr指针
std::weak_ptr相对于std::shared_ptr更加的复杂,它可以指向一个std::shared_ptr,不过它并不像std::shared_ptr一样拥有该内存。std::weak_ptr就像std::d,当使用weak_ptr成员lock时,则可返回其指向内存的一个shared_p......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!