c++中的智能指针是什么


c++程序员一个头疼的问题就是用指针开空间与销毁空间。
试着执行下面一段代码:
/*******************************/
class A
{
public:
 int *q;
 A(int *p){q=p;}
 ~A(){delete q;}
};
class B
{
public:
 int *q;
 B(int *p){q=p;}
 ~B(){delete q;}
};

#include<iostream>
#include<string>
using namespace std;
int main()
{   
 int n=3;
 A a(&n);
 B b(&n);
 return 0;
}
/*******************************/
如何,出错了吧?
这就是因为A对象析构时已经销毁了n的内存空间,然后B的指针就成了空的,B再析构就出错了。
智能指针的出现主要是为了解决类似问题,具体解决方法如楼上所说,引入计数器,确保最多一个析构时删除指针空间。

当有几个对象 共同用一个资源时,则它们同时指向了这个资源,如果用普通的指针,则在其中一个对象析构时就会将这个共用的资源销毁,有了智能指针就不用担心,它里面有对象计数,代表有几个对象在用它,销毁一个就减1,直到
为0,为0时就表示没有对象用这个资源了,就会自动释放资源存储区!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值