在 C++ 中使用 new 分配的特定数组块 delete[]

Vai*_*sht 0 c++ memory arrays new-operator

我正在用 C++ 编写一个简单的堆栈程序。我已经动态分配了数组。我想知道是否有任何方法可以删除(解除分配)数组的特定块。

  int *arr = NULL ;
  arr = new int[some_size];
  .
  .
  .
  .
  //now suppose I want to deallocate a specific block
  //suppose 
  int i = 4;

  //can I do something like

  delete[i] arr;

Run Code Online (Sandbox Code Playgroud)

我知道这是一个愚蠢的问题,但我仍然想知道。谢谢你。

eer*_*ika 5

只能解除分配整个分配 - 而不是它的一部分。没有这样的语法delete[i]。只能将直接从 返回的指针new[]传递给delete[]


但是,您可以实现自己的分配器,该分配器可以处理全局分配器中的单个块,从而提供可以单独释放的较小分配。这是一项高级技术:不适合初学者。它(可能)不是您实现任何程序所需要做的事情。但在某些情况下,如果您知道自己在做什么,它对优化很有用。

我将如何实现我自己的分配器

从全局分配器中分配一些内存 M。

编写一个以字节数为参数的函数。在函数中,使用一些数据结构来跟踪 M 的哪些部分先前已分配。从 M 中选择一个尚未分配的字节范围。在数据结构中将其标记为已分配,返回指向该范围开头的指针。

编写另一个将指针作为参数的函数。将为该分配保留的内存标记为空闲。

更好的是,使用这些函数实现一个符合标准库中分配器概念的类型,以便分配器可以用作标准容器的模板参数。

  • @VaibhavBisht *您能否用一个示例来解释一下..* -- 创建您自己的分配器是一个高级主题,而不是可以在单个 SO 答案块中解释的内容。另外,你原来的帖子说“我正在用 c++ 编写一个简单的堆栈程序”,那么你为什么要引入除了简单之外的任何东西呢? (3认同)