智能指针Smart Pointer 第二节 unique_ptr

网友投稿 797 2022-09-04

智能指针Smart Pointer 第二节 unique_ptr

智能指针Smart Pointer 第二节 unique_ptr

unique_ptr是独享被管理对象指针所有权(owership)的智能指针。

unique_ptr对象封装一个原始指针,并负责其生命周期。

当该对象被销毁时,会在其析构函数中删除关联的原始指针。

在任何给定的时刻,只能有一个指针管理内存

当指针超出作用域时,内存自动释放

该类型指针不可copy,只可以move

三种创建方式

1.通过已有裸指针创建

2.通过new创建

3.通过std::make_unique创建(推荐)

unique_ptr可以通过get()获取地址

unique_ptr可以通过->调用成员函数

unique_ptr可以用通过*调用dereferencing

#include

#include

#include

using namespace std;

void f1() {

unique_ptr p(new int(5));

cout<<*p<

//unique_ptr p2(p);

//unique_ptr p3 = p;

unique_ptr p2 = std::move(p);

cout<<*p2<

//cout<<*p<

}

​上面的代码就创建了一个unique_ptr。需要注意的是,unique_ptr没有复制构造函数,不支持普通的拷贝和赋值操作。因为unique_ptr独享被管理对象指针所有权,当p2, p3失去p的所有权时会释放对应资源,此时会执行两次delete p的操作。对于p2,p3对应的行,会提示报错

unique_ptr虽然不支持普通的拷贝和赋值操作,但却可以将所有权进行转移,使用std::move方法即可。

unique最常见的使用场景,就是替代原始指针,为动态申请的资源提供异常安全保证。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:负载均衡、分布式、集群的理解以及多台服务器代码如何同步(负载均衡集群的三种实现方式)
下一篇:使用EventLog Analyzer进行日志取证分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~