我正在用C ++编写一个内存管理器 - 也就是说,一个从堆中分配大量字节的类,然后为我的程序分配和释放函数。
void* allocate(int size);
void deallocate(void*, int size);
这很好用,但我不喜欢的是我需要这样做才能使用它:
CClass* myobject = (CClass*) manager->allocate(sizeof(CClass));
所以我的问题是,有没有办法将类类型传递给函数而不是使用void指针?这将消除对cast和sizeof调用的需要,并且还可以消除将对象大小传递给deallocate函数的需要。
有没有人知道我可以做得更好的方式?
答案 0 :(得分:5)
您可以使用模板功能。
简化示例:
#include <string>
#include <iostream>
using namespace std;
template<typename T>
T* allocate() {
return (T*) malloc(sizeof(T));
}
int main() {
int *s = allocate<int>();
*s = 42;
return *s;
}
答案 1 :(得分:0)
您可以为任何特定的用户定义类型重载operator new和operator delete,以便这些操作符使用您的分配器而不是默认的堆分配器。