C++自制智能指针

简介

智能指针(英语:Smart pointer)是一种抽象的数据类型。在程序设计中,它通常是经由类模板来实现,借由模板来达成泛型,借由类别的析构函数来达成自动释放指针所指向的存储器或对象。
C++中内存管理是非常严格的,若指针使用new/new[]来动态分配内存,那么用完之后就必须使用delete/delete[]来释放。否则就会导致内存泄漏。而所谓的智能指针则是指针动态分配内存后,不需要再进行手动回收(delete/delete[])。C++标准模板库中也有拥有智能指针这一功能,在头文件<memory>中。其实智能指针可以理解为一个类,因为是有生命周期的,在类生命周期结束时会调用类的析构函数;我们便可利用这一原理实现对指针内存的动态回收。

代码

思路
主要思路就是,用new动态分配内存后,将内存的地址保存在动态指针类中,在析构函数中调用delete回收该内存。然后需要重载一下*->运算符实现一下指针的基本操作。

#include <iostream>

using std::cout;
using std::endl;

class C
{
public:
    C(){};
    ~C(){ cout << "C::~C()" << endl;};
    void b(){cout << "C::b()" << endl;}
    
};

template<class T_ptr>
class MyAutoPtr{
public:
    MyAutoPtr(void* obj_prt){
        this->ptr = (T_ptr*)obj_prt;
        cout << "分配内存成功,地址:" << this->ptr << endl;
    };
    ~MyAutoPtr(){
        if(this->ptr != NULL)
        {
            delete ptr;
            this->ptr = NULL;
            cout << "回收内存成功" << endl;
        }
    };
    T_ptr * operator->()
    {
        return this->ptr;
    }
    T_ptr & operator*()
    {
        return this->ptr;
    }
private:
    //定义指针
    T_ptr *ptr;
};

int main(void)
{
    MyAutoPtr<C> a(new C[100]);
    a->b();
    return 0;
}
手机上阅读

本文由 giao创作, 采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
原文地址:《C++自制智能指针》

 最后一次更新于2019-01-05

0 条评论

添加新评论

Markdown is supported.