c++中关于智能指针std::tr1::shared_ptr的用法

本文详细解释了智能指针的概念、作用及如何在C++中使用智能指针进行内存管理,包括如何声明、初始化、赋值以及如何在对象生命周期结束时自动释放内存。智能指针支持共享所有权,使得多个指针可以共享同一块内存资源,提高了内存使用的效率和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

智能指针本身绝对不能是动态分配的内存,不然智能指针就没有存在的意义了。
智能指针有个数据成员,是个指针,至于什么类型,看你类模板怎么实现。这个指针才是动态分配内存的。
只能本身必须是栈里分配内存。利用栈的自动回收数据的特性,在被系统西东回收时,调用智能指针类的析构函数,从而释放智能指针内部那个指针型数据成员所指向的内存。

举个例子
std::shared_ptr<int> p = std::shared_ptr<int>(new int);
这样你就声明了一个智能指针p,并且为其内部的真实指针分配了内存空间。
使用时p可以像一般指针那样用
比如
*p = 5;
即给其赋值5。
还有就是虽然你一开始new了,但是你不需要delete,只能指针会在其被系统销毁时,检查是否需要delete。
你这个智能指针是share的,意味着支持共享真实指针的所有权。
所以你还可以
std::shared_ptr<int> q = p;

这样p和q同时指向同一个内存。
如果p失效了,p的析构函数不会delete真实指针,因为q还没失效。只有当q也失效,p才会在自己失效时自动delete掉内部的真实指针。这就是智能指针智能的地方
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值