C++中的动态类类型
Dynamic class type in C++
我正在用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,以便这些运算符使用您的分配器而不是默认的堆分配器。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 创建类类型的动态分配数组,其中类不得具有默认构造函数
- 非类类型表达式的静态类型与动态类型之间的差异
- 指针类型类成员的动态强制转换的恒定性是什么?
- 如何使用类型级函数动态创建静态类型?
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 复合类型的动态数组
- 根据动态选择类型C++模板使用情况
- 类型测试对象的动态数组的这两个声明之间的区别?
- 如何在一个属性中动态存储基元类型
- 动态调用具有不同返回类型的相同命名函数
- 如何在 Visual Studio 2015 中将项目的配置类型动态更改为静态库?
- C++基于子类型动态强制转换结构
- 基元类型动态分配数组的析构函数
- 如何根据要写入的数据类型动态选择文件句柄
- 如何从另一个实例的类型动态实例化新实例?C++