【发布时间】:2019-04-10 05:31:13
【问题描述】:
情况
我正在为动态内存(取消)分配编写内存管理器。对于class A 在调用operator new(或delete)时使用它,class A 从class CustomAllocate 继承就足够了,new 和delete 本身重载了使用内存管理器。
问题
但是,显然我完全错过了对齐要求。不幸的是,CustomAllocate::new 没有关于从它继承的class A 应该如何对齐的信息,因为唯一的参数是所请求内存的大小。我正在寻找一种方法来包含对齐信息,而不必在每个class A 中重载new(和delete)来使用内存管理器。
想法 1(以及为什么它不起作用)
模板class CustomAllocate 带有一个表示对齐要求的整数值并像这样继承:class A : public CustomAllocate< alignof(A) >。
不可能,因为 alignof(A) 在必须作为模板参数传递时无法知道,即使传递的参数不应更改 class A 的对齐要求。
想法 2(以及为什么它不起作用)
通过复制粘贴 return alignof(A); 之类的内容,在每个 class A 中实现一个纯虚函数 virtual int CustomAllocate::getAlignment() = 0。
不可能,因为new 是静态的,因此永远无法访问虚函数。
有什么可行的想法吗?
【问题讨论】:
标签: c++ alignment operator-overloading new-operator generic-programming