智能指针:能够自动释放从堆中申请的资源
原理如下:(实现运算符“*”以及‘->’的重载)
1、定义一个类用于狗仔存放数据的对象
class A
{
public:
A(){
cout<<"构造函数"<<endl;
}
~A(){
cout<<"析构函数"<<endl;
}
string m_str; //m_str用于存放字符串
};
2、定义智能指针类
class Pta{
public:
Pta(A *pa):m_pa(pa){} //在初始化列表中分配资源,初始化指针A *m_pa
~Pta()
{
delete m_pa; //在析构函数中释放资源
}
A* operator->(void)const //运算符->重载
{
return m_pa; } //返回指针
A& operator*(void)const
{
return *m_pa; //返回引用
}
private:
A *m_pa;
};
测试:
int main()
{
// A *p = new A;
// p->m_str = "hello";
Pta pa(new A);
pa->m_str = "hello";
cout<<(*pa).m_str<<endl;
auto_ptr<A> pa(new A);
pa->m_str = "hello";
cout<<(*pa).m_str<<endl;
}
注意:智能指针类可以使用auto_ptr< classname> obj(new classname)模板代替