如何检查是使用malloc还是new分配内存

时间:2014-05-12 16:52:25

标签: c++ c memory-management

我正在处理一些遗留的C / C ++代码,其中使用malloc以及new分配内存。我想创建一个通用的包装函数来使用freedelete []来释放内存,具体取决于它的分配方式。

有没有办法确定如何分配内存?这是一个伪代码。

double *x;
double *y;
x = (double *) malloc(size);
y = new double [size]

doSomething();
deallocateMemory(x, y);

我希望deallocateMemory确定是要拨打free还是delete []。任何帮助,将不胜感激。

3 个答案:

答案 0 :(得分:5)

您可以自己实施malloc(),而不是使用标准库提供的实现。您还可以重载运算符newdelete。没有什么可以阻止你在这些实现中添加自己的簿记,所以是的,这是完全可能的。

是否推荐?不,不是。

这实现了垃圾收集的尝试。如果这是真的,那么你正在以错误的方式看待C ++。 C ++ 有它的清理工具和它的析构函数。有现成的指针容器实现,它们在析构函数中清理已分配的内存。其他人已提到它们,我不会从其他人的答案中复制粘贴。

答案 1 :(得分:3)

一旦获得所有权,就将原始指针包裹在适当的智能指针中(例如std::unique_ptrstd::shared_ptr)。

此外,订购一个nine-tail cat并鞭打负责这一混乱的人。

enter image description here

答案 2 :(得分:1)

你想写

  

用于释放内存的通用包装函数

然后你需要写

  

分配内存的通用包装函数

并且,根本不推荐。尽量让你的目标干净。如果您必须在代码的某些部分处理malloc/free指针而无法修改malloc部分,请尽量不要将该部分与new/delete部分混合。

否则,您没有标准方法来确定指针使用的分配方法。