C++中的智能指针

C++中有三种智能指针:std::unique_ptrstd::shared_ptrstd::wake_ptr,都在<memory>头文件定义中。

出现智能指针的缘由:C++内没有内存回收机制,程序员分配和释放经常会出错。

1.unique_ptr

unique_ptr之前,C++98引入了auto_ptr,但在C++11标准中auto_ptr被标为遗弃;主要原因有:

(1)auto_ptr不安全;

(2)auto_ptr不能用在STL容器中。

《C++Primer》中指出auto_ptr的缺陷:

在vs中对于智能指针赋值的操作:

可以看出,unique_ptr直接报错,也就是说编译不能通过,而auto_ptr并没有报错,依然可以编译通过。

再看auto_ptr赋值操作对象所有权的交换:

可以看出,赋值操作后,右操作数已经交出对象的所有权,下面再操作右边的指针就会使程序崩溃!

如下:

所以,《C++高级编程》中指出:

 

vs编译器支持C++标准设置:

【参考】

1.STL四种智能指针

2.《C++Primer》

3.《C++高级编程》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值