【C++学习】C++中的new VS C语言中的malloc
2015-05-19 20:10
281 查看
【C++学习】C++中的new VS C语言中的malloc
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/
前几天一个朋友去面试百度空间的一个职位,被问及这个问题,我听后说了几点,不过感觉还是不透彻,所以上网查阅了一些资料,自己又想了想,总结一下。
动作不同:
在C++中,new一个对象时,程序完成对象的空间的分配的同时,构造函数也被调用,类似,delete一个对象时,对象的空间被释放的同时析构函数也被调用。
在C中,malloc和free 则没有构造函数和析构函数被调用这个动作。当然,在没有特定的构造函数或析构函数时,C++也没有这个动作。
关于重载:
在C++中,对于任何非数组的空间分配,我们可以通过定义函数名相同但参数不同的构造函数完成对构造函数的重载,而对于数组的空间分配,就只能使用默认构造函数了,若你试图去开辟一个没有默认构造函数的数组,Compiler会出错。
在C中,自然是没有重载这个事情了。
返回值不同:
在C中,malloc返回一个void *指针,需要你强制指针类型转换
在C++中,你直接new一个就好。
注意,对于基本类型,这个差别是二者唯一的差别,当然不建议在C++中使用malloc+强制类型转换创建基本数据类型或者对象。
定义不同:
new是操作符
malloc是函数
异常处理方式不同:
new抛出异常
malloc返回NULL
分配空间单位不同:
new分配单位为对象所占用空间的倍数。
malloc为字节
使用提示:
1.delete使用不当会造成内存泄露,下边的这个例子就是只有第一个t被释放掉:
Test* t = new Test[3];
delete t;
而下列代码会导致堆崩溃或数据丢失。
Test* t = new Test; delete[] t; // <-- This is even worse
2.realloc只能用于malloc。C++中你只能重新开辟空间、复制、释放原来空间来完成相同的操作。
3.性能区别,根据http://code.dawnofthegeeks.com/2009/05/04/fyi-new-vs-malloc/ 其中提到malloc/free慢于new/delete,但是在后来笔者开发的一个程序中却出现了不同的场景。
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
相关文章推荐
- 【C++学习】C++中的new VS C语言中的malloc
- C++中的new VS C语言中的malloc
- C++基础学习笔记----第十四课(new和malloc的区别、单例模式等深入)
- C++学习笔记(七)malloc、free、 new、delete与二维数组
- C++基础学习笔记----第十四课(new和malloc的区别、单例模式等深入)
- C++入门学习:new,delete及其和malloc,free的区别
- C++学习之new与delete、malloc与free
- C++学习之new与delete、malloc与free
- C++学习1-(C语言基础、VS快捷键)
- C++ 内存管理之四(new/delete vs malloc/free)
- C++内存分配(1) - malloc vs new, delete vs free
- C/C++日常学习总结(第二篇)结构体和类的大小及区别&为什么是new一个对象而不是malloc
- C++ 内存管理之四(new/delete vs malloc/free)
- C++ 内存管理之四(new/delete vs malloc/free)
- C++ new VS malloc 区别
- C++内存分配秘籍—new,malloc,GlobalAlloc详解
- C++ 学习笔记 1.0 : 基本语言(变量和基本类型,标准库类型,表达式,语句,函数,标准IO库)
- C++一些注意点之new和malloc
- malloc vs new part 1
- C++学习笔记四之使用new来创建动态数组