new/delete和malloc/free、指针和引用、strlen和sizeof、C和C++区别、面向对象和面向过程

原创 2018年04月15日 19:59:51

1、new和malloc的区别

对于自定义类型:

 new会先调用operator new函数,申请足够的内存(通常底层使用malloc实现)。然后调用类型的构造函数,初始化成员  变量,最后返回自定义类型指针。delete先调用析构函数,然后调用operator delete函数释放内存(通常底层使用free实现)。

 malloc/free是库函数,只能动态的申请和释放内存,无法强制要求其做自定义类型对象构造和析构工作。

2、指针和引用

空指针不指向任何对象,在试图使用一个指针之前可以检查它是否为空,void*是一种特殊类型的指针,可用于存放任意对象的地址。

  • 指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元,即指针是一个实体;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。
  • 可以有const指针,但是没有const引用
  • 指针可以有多级,但是引用只能是一级。
  • 指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;
  • 指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了,从一而终
  • ”sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小;

3、strlen和sizeof

strlen

strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。

sizeof 
C语言中判断数据类型或者表达式长度符;不是一个函数,字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来!

4、C和C++区别

  • C是一个结构化语言,它的重点在于算法和数据结构,C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。
  • C++首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。
  • C++引入了重载、内联函数、异常处理等等玩艺儿,C++更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和包容器类。
  • C是面向过程的语言,而C++是面向对象的语言。
  • C和C++动态管理内存的方法不一样,C是使用malloc/free函数,而C++除此之外还有new/delete关键字;
  • C中的struct结构体和C++的类
  • C++支持函数重载,而C不支持函数重载。
  • C++中有引用,而C没有

5、面向对象和面向过程

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
面向过程
  优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。 
  缺点:没有面向对象易维护、易复用、易扩展
面向对象
  优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 

  缺点:性能比面向过程低


封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

C语言 malloc/free和C++中new/delete的区别

1. malloc()函数 1.1 malloc的全称是memory allocation,中文叫动态内存分配。 原型:extern void *malloc(unsigned int num_b...
  • chy19911123
  • chy19911123
  • 2015-08-31 15:51:10
  • 5479

malloc/free和new/delete的区别

malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要...
  • chance_wang
  • chance_wang
  • 2007-05-14 22:31:00
  • 19102

malloc/free与new/delete异同点

malloc/free与new/delete异同点 相同点malloc/free与new/delete都可以用于申请动态内存和释放内存,他们申请的空间都在堆上分配。 不同点1)操作对象不同malloc...
  • yzhang6_10
  • yzhang6_10
  • 2016-04-12 18:33:50
  • 733

整理:new/delete和malloc/free的区别和联系

1. malloc()函数 1.1 malloc的全称是memory allocation,中文叫动态内存分配。 原型:extern void *malloc(unsigned int num_byt...
  • bat67
  • bat67
  • 2016-07-25 11:25:55
  • 1610

面试题:C++有了malloc/free,为什么还需要new、delete?

1、面试宝典面试题(P81):C++有了malloc/free,为什么还需要new、delete? malloc与free是C、C++语言的标准库函数,new/delete是C++的运算符。他们都用...
  • qq_22522121
  • qq_22522121
  • 2015-03-18 22:20:22
  • 1005

new/delete和malloc/free的区别(举例说明)(简单点)

先说说区别: 1. new/delete是C++里才有的。 2. new/delete通常来说是操作符,就是"+","-"一样。 3. new/delete是可以重载的,而重载之后,就成为了函数...
  • shixin_0125
  • shixin_0125
  • 2015-03-25 10:41:47
  • 1002

C语言中的malloc/free与C++中的new/delete的区别

c++面试的时候,一般会有这样一道基本题:《C语言中的malloc/free与C++中的new/delete的区别》。 个人觉得没啥意思,因为一般c++程序员都懂,不过要每个点都回答上也不容易(主要是...
  • fish43237
  • fish43237
  • 2015-01-15 20:47:07
  • 1088

C++学习之new与delete、malloc与free

在C/C++的面试时,对于new/delete和malloc/free这两对的使用和区别经常被考查到,如果这种基础的问题都答不上来,估计很难过面试了。这篇文章仅仅是浅显的讲一下,仅供参考。 一、ne...
  • lisong694767315
  • lisong694767315
  • 2014-07-26 01:55:41
  • 1721

C++中malloc/free与new/delete的区别及内存分配失败错误处理

首先谈谈C/C++内存分配失败错误处理 一、C语言中的malloc/calloc/realloc/valloc/alloca/memalign函数: 这样的内存分配函数在内存分配失败时都返...
  • Arcsinsin
  • Arcsinsin
  • 2013-10-13 10:00:09
  • 9675

C++ 中 malloc/free 与 new/delete 浅析

new/delete 通常来说是操作符,就是"+","-"一样,malloc/free 是 C++/C 语言的标准库函数 —— 本质区别。本文主要从以下5各方面比较、分析 malloc/free,ne...
  • u013630349
  • u013630349
  • 2015-04-08 21:43:23
  • 1030
收藏助手
不良信息举报
您举报文章:new/delete和malloc/free、指针和引用、strlen和sizeof、C和C++区别、面向对象和面向过程
举报原因:
原因补充:

(最多只允许输入30个字)