我正在处理一些遗留的C / C ++代码,其中使用malloc
以及new
分配内存。我想创建一个通用的包装函数来使用free
或delete []
来释放内存,具体取决于它的分配方式。
有没有办法确定如何分配内存?这是一个伪代码。
double *x;
double *y;
x = (double *) malloc(size);
y = new double [size]
doSomething();
deallocateMemory(x, y);
我希望deallocateMemory
确定是要拨打free
还是delete []
。任何帮助,将不胜感激。
答案 0 :(得分:5)
您可以自己实施malloc()
,而不是使用标准库提供的实现。您还可以重载运算符new
和delete
。没有什么可以阻止你在这些实现中添加自己的簿记,所以是的,这是完全可能的。
是否推荐?不,不是。
这实现了垃圾收集的尝试。如果这是真的,那么你正在以错误的方式看待C ++。 C ++ 有它的清理工具和它的析构函数。有现成的指针容器实现,它们在析构函数中清理已分配的内存。其他人已提到它们,我不会从其他人的答案中复制粘贴。
答案 1 :(得分:3)
答案 2 :(得分:1)
你想写
用于释放内存的通用包装函数
然后你需要写
分配内存的通用包装函数
并且,根本不推荐。尽量让你的目标干净。如果您必须在代码的某些部分处理malloc/free
指针而无法修改malloc
部分,请尽量不要将该部分与new/delete
部分混合。
否则,您没有标准方法来确定指针使用的分配方法。