C++ Primer : 第十二章 : 动态内存之shared_ptr与new的结合使用、智能指针异常

本文探讨了在C++中如何正确使用shared_ptr与new的组合,强调避免混合普通指针和智能指针,不直接通过get函数初始化或赋值,并介绍了一个智能指针在异常情况下的应用案例,以及智能指针可能存在的陷阱。
摘要由CSDN通过智能技术生成

shared_ptr和new结合使用

一个shared_ptr默认初始化为一个空指针。我们也可以使用new返回的指针来初始化一个shared_ptr:
shared_ptr<double> p1;
shared_ptr<int> p2(new int(42)); // p2指向一个值为42的int

接受指针参数的智能指针构造函数是 explicit 的,因此,我们不能将一个内置指针隐式的转换为一个智能指针,必须使用直接初始化形式
shared_ptr<int> p1 = new int(1024); // 错误,必须使用直接初始化形式
shared_ptr<int> p2(new int(1024)); 

p1的初始化隐式的要求编译器用一个new返回的int* 来初始化一个shared_ptr。由于我们不能进行内置指针到智能指针间的隐式转换,因此这条初始化语句是错误的。同样的, 一个返回值为shared_ptr的函数不能在其返回语句中转换一个普通指针
shared_ptr<int> clone(int p) {
  
    return new int(p); // 错误,隐式转换为shared_ptr
}

我们必须将shared_ptr显示绑定到一个想要返回的指针上:

shared_ptr<int> clone(int p) {
  
    return shared_ptr<int>(new int(p)); 
}


默认情况下,一个用来初始化智能指针的普通指针必须指向动态内存,因为智能指针默认使用delete来释放它所关联的对象。 我们也可以把智能指针绑定到其他类型的指针上,但是我们必须提供自己的删除操作来替代delete:

定义和改变shared_ptr的其他方法
shared_ptr<T> p(q)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值