自定义运算符new()而不修改类

时间:2016-10-15 18:01:16

标签: c++ new-operator

对于嵌入式系统,我希望能够覆盖现有类的new() - 运算符,而无需修改类'源代码(当然也适用于delete())。

背景:课程(让我们称之为Foo)用于带有MMU的平台(所以标准的新操作员可以)以及在没有MMU的有限平台上,需要某种类型的内存池,以防止内存碎片。

不幸的是,由于Foo没有声明自定义新运算符,因此以下方法无法运行:

Foo.hpp:

class Foo
{
  .. // no declaration for new() operator!
}

main.c中:

...
void* Foo::operator new(std::size_t sz) { ... }
...

但是,如果在Foo.hpp中声明Foo :: new 而没有提供实现,则该类的用户被强制提供实现,即使std :: new非常适合。我希望避免这种情况,尊重可用性。

获得Foo的专用版本也不是解决方案,因为Foo将由工厂类实例化,而不是(不应该)知道衍生物。

我发现的唯一方法是在#define中声明封装Foo :: new,如果用户需要提供自定义的,例如:

class Foo
{
#ifdef FOO_USE_CUSTOM_NEW
  void* operator new(std::size_t sz) { ... }
#endif
}

嗯,那看起来更像C而不是C ++ ...

必须有更好的方法来实现这一目的。最后但并非最不重要的是,编译器不幸仅限于C ++ 98。

0 个答案:

没有答案
相关问题