对于嵌入式系统,我希望能够覆盖现有类的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。