C++实现智能指针(涉及知识点:重载运算符,内存泄露的风险)

案例

C++实现智能指针(涉及知识点:重载运算符,内存泄露的风险)_第1张图片

有时候代码很长,很容易就忘了释放P。导致内存泄露,在程序结束后才会释放。

内存泄露的风险

如果代码需要的内存很大,前面的代码用完了new申请的内容不去释放,就会被一直占用着,后面可能不够用了造成程序崩溃。

解决方法

定义一个局部对象,放在test01函数中,在它的析构函数中释放P。
因此test01函数运行结束,将释放该对象,就释放了p
#include 
using namespace std;

class person
{
public:
    person(int age)
    {
        this->age = age;
    }
    int age;

};

class Smartpointer
{
public:
    Smartpointer(person *p1)
    {
        this->p = p1;
    }
    person* p;
	// 重载该类的 -> 操作符
    person *operator->()
    {
        return p;
    }

    ~Smartpointer()
    {
        delete p;
        cout<<"释放了p"<<endl;
    }
};

void test01()
{
    person* p = new person(10000);
    Smartpointer sp(p);
    cout<<sp->age<<endl;
    // cout<age<
    // delete p;
}

int main()
{
    test01();
    return 0;
}

你可能感兴趣的:(C++笔记,c++,开发语言)