C++ 如何覆盖std::函数的new和delete而不全局覆盖它

C++ 如何覆盖std::函数的new和delete而不全局覆盖它,c++,memory-management,embedded,new-operator,delete-operator,C++,Memory Management,Embedded,New Operator,Delete Operator,我在为嵌入式环境编程。我不能使用标准的new和delete,因为它们不是确定性的,可能会导致堆碎片和最终的设备运行时故障 我一直在使用std:function,直到我发现在stdlib定义的深处有一行代码正在执行: { __functor._M_access<_Functor*>() = new _Functor(std::move(__f)); } 但这需要更改标准库的代码以插入特定于类的分配器及其模板实现,因此我不确定最终会有多少内存池 关于如何执行此操作的任何建议。std::

我在为嵌入式环境编程。我不能使用标准的new和delete,因为它们不是确定性的,可能会导致堆碎片和最终的设备运行时故障

我一直在使用
std:function
,直到我发现在stdlib定义的深处有一行代码正在执行:

{ __functor._M_access<_Functor*>() = new _Functor(std::move(__f)); }
但这需要更改标准库的代码以插入特定于类的分配器及其模板实现,因此我不确定最终会有多少内存池


关于如何执行此操作的任何建议。

std::function
用于具有分配器感知构造函数。但是它的指定和实现很差,因此在C++17中被删除。好问题,但我认为答案是您不应该使用
std::function
这有帮助吗:如果您不能使用std:function,那么如何存储lambda以供以后调用?如果没有
std::function
模板,您可以选择。整个标准库使用tamplates而不是
std::function
,因为它们更轻。我认为lambda、模板和新位置可能会出现在答案中,但我根本不清楚问题是什么。:-)
 class Context : public NetworkPacketContext {

      .......

      inline void* operator new(const size_t size) {
        return memory::allocateSmallBlock(size);
      }

      inline void operator delete(void* ptr) {
        return memory::freeSmallBlock(ptr);
      }

      .....
  };