2012年C++专家进阶之一
一、C中的malloc与C++中的new的8大区别:
序号 |
比较项 |
malloc |
new |
说明 |
1 |
应用范围 |
C C++ |
仅仅是C++语言 |
New是C++语言新引进的操作符,C++兼容C语言,或者说对C语言进行扩充 |
2 |
操作符 |
不是 |
New以及 delete是 |
|
3 |
重载 |
在C++语言可以 |
|
重载是面向对象语言的特性 |
4 |
构造函数 |
malloc仅仅申请内存,不能调用构造函数 |
new的时候可以调用对象的构造函数 |
构造函数是面向对象的概念 |
5 |
析构函数 |
free仅仅释放内存, 不能调用析构函数 |
delete的时候调用对象的析构函数 |
析构函数是面向对象的概念 |
6 |
返回值 |
malloc返回的是void型指针 |
new返回的是某种数据类型的指针 |
|
7 |
释放 |
malloc申请的空间必须由free释放 |
new申请的空间必须由delete来释放 |
两者的实现机理不同 |
8 |
理解 |
函数 |
操作符 |
|
二、sizeof和strlen的5大区别:
序号 |
比较项 |
sizeof |
strlen |
说明 |
1 |
理解 |
操作符 |
库函数 |
|
2 |
输入参数 |
1.可以是数据类型; 2.也可以是变量; 举例:如sizeof(float)或者 |
只能是以’\0’结尾的字符串; 简言之:仅仅是字符串,并且是带’\0’结尾的字符串; |
|
3 |
数组 |
不退化 |
传递给strlen就退化为指针 |
|
4 |
返回值 |
计算的数据类型占用的内存空间大的大小 |
计算的字符串的实际长度,也就是不含’\0’的长度 |
|
5 |
时间 |
编译器在编译时,就计算出sizeof的结果 |
Strlen函数必须在运行时才能计算出来 |
|