智能指针之auto_ptr02

1 auto_ptr

该智能指针已经被弃用,下面只是演示它所有权改变后不报错误的代码,实际上你编译的时候它也会提示你auto已经被弃用,但还能运行。

#include <iostream>
#include <string>
#include <memory>
using namespace std;

/*
      auto_ptr<>的使用 已经被C++11抛弃 
      1 采用所有权模式 存在潜在的内存问题  任何情况别用
      这里只是演示它存在的问题
*/
void test01(){

	auto_ptr<string> p1(new string("Hello World")); //开辟string对象并且用string的构造赋值 然后用智能指针p1指向 
	auto_ptr<string> p2;

	p2=p1;                          //将p1所有权给p2 p1被释放了 不能再使用
	for(int i=0;i<p2->size();i++){
		//cout<<p1->at(i); error
		cout<<p2->at(i);
	}
	cout<<endl;
}
/*
    总结:p2=p1后,p2夺走所有权,你看源码可以知道p1会在交换之后被释放掉了,
    所以在使用它就会相当于非法访问,但是他不会报错,这就是auto_ptr的问题。
*/


int main(){

    test01();
    return 0;
}

结果:

  • 1)p1所有权被代替后,仍使用p1就会报错。
    在这里插入图片描述

  • 2)虽然更替后p2仍能使用,但存在的p1存在风险,开发人员可能不小心使用,所以绝对不能再使用auto_ptr。
    在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值