智能指针学习

智能指针:智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数。避免在某一个跳转处来不及走到delete语句,造成内存泄漏。
auto_ptr
创建智能指针方式auto_ptr<Test> ptest(new Test("123"));
注意我们访问auto_ptr的成员函数时用的是“.”,访问指向对象的成员时用的是“->”
ptest2 = ptest,ptest2会接管ptest原来的内存管理权,ptest会变为空指针,如果ptest2原来不为空,则它会释放原来的资源

unique_ptr (没见过暂时不想学)

share_ptr
可以被多个指针共享,它使用计数机制来表明资源被几个指针共享。
可以通过成员函数use_count()来查看资源的所有者个数。
可以通过传入auto_ptr, unique_ptr,weak_ptr来构造。
调用release()时,当前指针会释放资源所有权。

share_ptr赋值。
赋值给同类型对象,不能是普通的C指针或者new运算符的返回值。(计数这一块挺复杂的,再找点东西看)
shared_ptr a(new T());
shared_ptr b(new T());
a = b;  //  a原先指向的对象被销毁,b指向对象的引用计数+1

shared_ptr a(new T());
a = shared_ptr();//可以赋值,但是赋值为NULL

weak_ptr:解决共享指针死锁问题。(没见过以后再学)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值