关于delete的疑惑
最近在看malloc和delete的问题一直有个不明白的地方比如说
int* data()
{
char *a=(int*)malloc(100*sizeof(char));
//....然后给char填充数据
return a;
}
int main()
{
char *Data=data();
//???问题就是什么时候去delete在data中的malloc呢?可以通过delete Data来释放在函数data()中申请的内存吗?
}
一直对于内存的申请和堆栈总是不太清楚地,还请指教哈
[解决办法]
我就不复制粘贴了
你看看这篇文章吧
讲的很详细
http://wenku.baidu.com/view/2a2a434de518964bcf847ccd.html
[解决办法]
我们不要企图用malloc/free 来完成动态对象的内存管理,应该用new/delete。
由于内部数据类型的“对象”没有构造与析构的过程,对它们而言malloc/free 和new/delete
是等价的。
既然new/delete 的功能完全覆盖了malloc/free,为什么C++不把malloc/free 淘
汰出局呢?这是因为C++程序经常要调用C 函数,而C 程序只能用malloc/free 管理动
态内存。
如果用free 释放“new 创建的动态对象”,那么该对象因无法执行析构函数而可能
导致程序出错。如果用delete 释放“malloc 申请的动态内存”,理论上讲程序不会出错,
但是该程序的可读性很差。所以new/delete 必须配对使用,malloc/free 也一样。
引用高质量C++ 编程指南