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函数必须在运行时才能计算出来 |
|