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_;
}