【问题标题】:How to clear the memory correctly? [duplicate]如何正确清除内存? [复制]
【发布时间】:2015-04-21 20:52:08
【问题描述】:

我有一些代码:

MemoryManager mm;
char *a = new (mm) char [len +1];

如何通过指针 a 释放所有内存?

【问题讨论】:

  • 你想做什么?而且不需要deletea指向的内存(如果这就是你的意思free
  • 作为@Praetorian,您不需要空闲内存,因为您没有分配内存。
  • 什么是MemoryManager
  • @Praetorian: 我需要delete a;但这会是内存泄漏。
  • 好的,this question

标签: c++ c++11 memory


【解决方案1】:

首先,内置的任何东西都无法知道如何删除您的 a 数据 - 您是为它分配新位置的人,所以清理它是您的工作。

不幸的是,似乎没有办法为此重载delete。只需使用您选择的方法名称:

MemoryManager mm;
char *a = new (mm) char [len +1];

mm.cleanup(a); // since mm allocated us the memory, only it knows how to destroy it.
               // Note that this also needs to do obj.~ClassName() for class types

请参阅 isocpp 常见问题解答中的 'is there a placement delete'

【讨论】:

  • 有人能详细解释一下这个例子吗?
  • @gomons:他们正在使用自定义内存管理器创建char[]。他们想告诉这个内存管理器清理内存。
  • 所以char *a = new (mm) char [len +1]; 调用operator new()MemoryManager 中过载?
  • 我认为它调用operator new[](sizeof(char[len+1]), mm)
  • 你是对的,所以我无法理解 MemoryManager 类的意义。
猜你喜欢
  • 1970-01-01
  • 2018-02-21
  • 2017-12-05
  • 2016-07-21
  • 2015-11-07
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多