背景 出于硬件原因,我需要分配使用DOS Protected Mode Interface的内存,以便与某些低级接口(例如VESA BIOS Extensions)进行通信。
情况:
所以我可以为动态分配的内存重载new
和delete
,这很好,但我真的想为静态分配的内存重载分配器。我正在研究的项目是相当古老的库,因此需要相当数量的静态全局变量。
问题: 有没有什么方法可以重载这些变量的分配过程?如果没有,是否有一个模板可以动态分配这些不需要显式分配或删除的变量,并且几乎完全透明?
答案 0 :(得分:0)
可悲的是,没有关键字来指定您希望使用的内存分配类型,并且没有标准模板来强制堆分配。我能找到的最好的答案就是创建一个小的包装器类,它可以根据需要分配和删除内存,并为您提供对指针的访问。这没什么特别的,但这是我的一些代码。
template<typename T>
class mem
{
public:
mem(void) { m_data = reinterpret_cast<T*>(dos::malloc(sizeof(T))); }
~mem(void) { dos::free(m_data); m_data = nullptr; }
T* operator ->(void) noexcept { return m_data; }
operator T*(void) noexcept { return m_data; }
private:
T* m_data;
};