智能指针:
1.用起来像指针
2.会自己对资源进行释放
#include <iostream>
using namespace std;
class CStudent
{
public:
CStudent() {}
void test()
{
cout << "CStudent" << endl;
}
private:
char* m_pszBuf;
int m_nSex;
};
int main(int argc,char** argv)
{
CStudent* pStu = new CStudent();
if (pStu != nullptr)
{
delete pStu;
pStu = nullptr;
}
}
创建一个类,利用该类的构造和析构(进出作用域自动被编译器调用)的机制
来解决资源自动释放的问题
class CStudent
{
public:
CStudent() {}
void test()
{
cout << "CStudent" << endl;
}
private:
char* m_pszBuf;
int m_nSex;
};
//智能指针雏形,需要管理资源
class CSmartPtr
{
public:
//构造时对它赋值,析构时自动释放
//传进来的一定是堆对象
CSmartPtr(CStudent* pObj)
{
m_pObj = pObj;
}
~CSmartPtr()
{
if (m_pObj != nullptr)
{
delete m_pObj;
}
}
private:
CStudent* m_pObj; //将资源放入智能指针类中,管理起来
//(用一个资源作为指针,放到类里,管理起来)
};
int main(int argc,char** argv)
{
//虽然这里可以完成资源的自动释放,但是用起来不像是一个指针
CSmartPtr sp(new CStudent());
return 0;
}