C++中的动态类类型

Dynamic class type in C++

本文关键字:类型 动态 C++      更新时间:2023-10-16

我正在用C++编写一个内存管理器,也就是说,一个从堆中分配大量字节的类,然后有分配和释放函数供我的程序使用。

void* allocate(int size);
void deallocate(void*, int size);

这很好用,但我不喜欢的是,我需要这样做才能使用它:

CClass* myobject = (CClass*) manager->allocate(sizeof(CClass));

所以我的问题是,有没有一种方法可以将类类型传递给函数,而不是使用void指针?这将消除对强制转换和sizeof调用的需要,也可能消除将对象大小传递给dealocate函数的需要。

有人知道我能用什么更好的方法来做这件事吗?

您可以使用模板函数。

简化示例:

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

您可以为任何特定的用户定义类型重载运算符new和运算符delete,以便这些运算符使用您的分配器而不是默认的堆分配器。