C++拾遗--malloc free与new delete的同与不同
2015-02-20 20:27
302 查看
C++拾遗--malloc free与new delete的同与不同
调试
同样的功能使用new和delete来操作
对于内置类型,两组操作的效果是一样的。
malloc 只是分配了内存,而new 不仅分配了内存,还调用了构造函数。
free 只是释放了内存,而delete不仅释放了内存,还调用了析构函数。
malloc free
new delete
由于malloc只是给变量p本身分配了内存,但由于不调用构造函数,所以无法让p指向一片分配的内存。同理,free只是释放了变量p,由于并不调用析构函数,所以无法释放p指向的内存。
本专栏目录
C++拾遗 目录
所有内容的目录
CCPP Blog 目录
前言
在C中我们常使用malloc和free来动态分配与释放内存,在C++中对应的是new和delete。这里我们来探讨下他们的同与不同。正文
1.内置类型
对相同的代码进行调试,查看内存#include <iostream> using namespace std; int main() { int *p = (int*)malloc(sizeof(int) * 10); cout << p << endl; //断点 for (int i = 0; i < 10; i++) p[i] = i; //断点 free(p); //断点 cin.get(); return 0; }
调试
同样的功能使用new和delete来操作
#include <iostream> using namespace std; int main() { int *p = new int[10]; cout << p << endl; <span style="white-space:pre"> </span>//断点 for (int i = 0; i < 10; i++) p[i] = i; <span style="white-space:pre"> </span>//断点 delete[]p; <span style="white-space:pre"> </span>//断点 cin.get(); return 0; }调式
对于内置类型,两组操作的效果是一样的。
2.类类型
代码一
#include <iostream> using namespace std; class MyClass { public: MyClass() { cout << "MyClass create" << endl; } ~MyClass() { cout << "MyClass delete" << endl; } }; int main() { MyClass *p1 = (MyClass *)malloc(sizeof(MyClass)); free(p1); cout << "--------------------" << endl; MyClass *p2 = new MyClass; delete p2; cin.get(); return 0; }运行
malloc 只是分配了内存,而new 不仅分配了内存,还调用了构造函数。
free 只是释放了内存,而delete不仅释放了内存,还调用了析构函数。
代码二
#include <iostream> #include <new> using namespace std; class MyClass { public: int *p; MyClass() { //分配400M内存 p = new int[1024 * 1024 * 100]; cout << "MyClass create" << endl; } ~MyClass() { delete[]p; cout << "MyClass delete" << endl; } }; int main() { MyClass *p1 = (MyClass *)malloc(sizeof(MyClass)); //断点 free(p1); //断点 MyClass *p2 = new MyClass; //断点 delete p2; //断点 cin.get(); return 0; }启动任务管理器,查看内存消耗
malloc free
new delete
由于malloc只是给变量p本身分配了内存,但由于不调用构造函数,所以无法让p指向一片分配的内存。同理,free只是释放了变量p,由于并不调用析构函数,所以无法释放p指向的内存。
本专栏目录
C++拾遗 目录
所有内容的目录
CCPP Blog 目录
相关文章推荐
- C++ malloc free与new delete
- malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存
- C++中new(delete)和malloc(free)的常见问题
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- C++ Memory Management : What is the difference between malloc/free and new/delete?
- malloc free与new delete的区别和联系
- C++中有了malloc/free,为什么还需要new/delete?
- c++ malloc/free、new/delete
- new delete 和 malloc free的区别
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- C/C++内存分配方式,栈区堆区 new/delete/malloc/free
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- C++中new&delete与malloc&free比较
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- malloc与free在不同文件里的特殊用法总结
- C++中有了malloc/free,为什么还要用new/delete
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free(转)
- 高质量c++(有了malloc/free 为什么还要new/delete )
- 在C++动态库中释放调用动态库程序中生成的指针new和delete 或 malloc和free
- malloc/free与new/delete的相同点和不同点