C++管理堆上内存

  代码中如果有使用到堆上内存,必然涉及到内存的释放时机问题,有别于python的try...finally语法,C++中要实现类似的语法则显得比较困难,因此需要另辟蹊径,用栈内存的自动释放管理堆内存的释放。

  思路如下,用一个类包装好堆内存的分配(构造)和释放(析构),包装类在函数中调用时均为栈上分配,因而包装类在函数结束处(正常结束or中途return)均可以自动调用析构函数。代码如下:

 

template<typename T>
class TMlloc final{
public:
    TMlloc();
    ~TMlloc();
    TMlloc(const TMlloc<T>& t) = delete;
    TMlloc<T>& operator=(const TMlloc<T>& t) = delete;

    T* getMember() const;
private:
    T* member_ = nullptr;
};

template<typename T>
TMlloc<T>::TMlloc() {
    member_ = new T();
}

template<typename T>
TMlloc<T>::~TMlloc() {
    if (member_)
        delete member_;
    member_ = nullptr;
}

template<typename T>
inline T* TMlloc<T>::getMember() const
{
    return member_;
}

posted @ 2023-04-23 14:32  FayeValentine  阅读(22)  评论(0编辑  收藏  举报