智能指针
文章平均质量分 68
shared_ptr
猿来是码农
这个作者很懒,什么都没留下…
展开
-
weak_ptr 智能指针的使用
weak_ptr 对象的构造有3种方法:1,构造空对象,如 std::weak_ptr weakPtr;2,拷贝构造,如 std::weak_ptr weakPtr2(weakPtr);3,用shared_ptr 对象进行初始化,如public:~CTest()private:int mValue;return 0;原创 2023-07-05 16:05:45 · 987 阅读 · 0 评论 -
shared_ptr 变量的大小
所以一个 shared_ptr 类型的变量包含了 2 个指针,一个指向对象,一个应该是用于管理引用计数。一个指针变量,在64位系统下是占 8 个字节,所以一个shared_ptr 变量在 64 位系统下是 16 字节大小。就是指向_Tp 对象的指针,还有一个__shared_count<_Lp> 类型的变量_M_refcount;只要是变量就有大小,其大小就是取决于定义它的类型,那一个智能指针 shared_ptr<T> 类型的变量的大小是多少呢?可以看到一个智能指针变量的大小是 16 字节。原创 2023-06-16 14:44:00 · 284 阅读 · 0 评论 -
c++ enable_shared_from_this
智能指针 ptr1 和 ptr2 的引用计数都是 1,说明它们指向的不是同一个资源(这里可能会有人疑惑两个智能指针指向同一个地址,怎么引用计数没有增加呢?类 A 中有一个函数 getSharedPtr() 函数,用于返回指向当前对象的一个智能打针,就是用 this 构造了一个智能指针进行返回,我们看一下这样会不会有问题呢?我们看到,两个智能指针的引用计数都为2,这两个智能指针指向了相同的资源,在 main 函数退出后,两个智能指针释放,引用计数变为 0,资源释放正常。执行没有异常,那这样用是正确的吗?原创 2022-11-26 15:42:35 · 2815 阅读 · 0 评论 -
智能指针shared_ptr 的 reset使用
可以看到 Foo::bar = 100, use_count() = 2,此时两个智能指针都管理着 0x1029028 的资源,当调用 sptr1.reset();后,这个资源就少了一个管理者,所以 After reset(): use_count() = 1, sptr = 0x1029028,当离开作用域后,此资源才被释放。可以看到在调用 reset() 后,调用了对象的析构函数进行释放。带删除器的版本只会用在数组对象释放的情况,如果是数组对象的情况下不用删除器,则行为是未定义的。原创 2023-02-07 15:55:24 · 8501 阅读 · 1 评论