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

来源:百度知道 编辑:UC知道 时间:2024/07/02 17:08:17
说得简单深刻点,不要复制人家的,谢谢大家!!!!!!!!!!!!!

居然有人说是“通常指void*类型的指针”。。。。晕倒。。。。
引入智能指针可以防止出现悬垂指针的情况
一般是把指针封装到一个称之为智能指针类中,这个类中另外还封装了一个使用计数器,对指针的复制等操作将导致该计数器的值加1,对指针的delete操作则会减1,值为0时,指针为NULL

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再析构就出错了。
智能指针的出现主要是为了解决类似问题,具体解决方法如楼上所说,引入计数器,确保最多一个析构时删除指针空间。

智能指针是说生成类的复本时
两个指针指向同一个实例,就是共享数据,是为了节省空间
直到其中一个数据发生变化才分开成为两个实例

没发现,指针还有智能

通常指void*类型的指针

不能对该类指针进行*操作
也就是void *p; *p=20;(这种操作是非法的)