C++中各个概念的异同与区别

1.指针与引用的区别

  1. 指针有自己的一块空间,而引用只是一个别名
  2. 使用sizeof函数,指针大小为4个字节,而引用的大小是被引用对象的大小
  3. 指针可以被初始化为NULL,但引用必须是一个对象
  4. 作为参数传递是,指针需要被解引用才可以对对象进行操作,而直接对引用修改会改变引用所指的对象。
  5. 可以有const指针,但是引用不能const
  6. 指针可以随时改变指向的对象,而引用只能对一个对象进行引用
  7. 如果返回动态分配内存的对象或者内存,必须使用指针,引用可能引起内存泄漏

2.堆栈的区别

1.堆栈空间分配的区别
堆:由程序员分配释放,若程序员不释放,程序结束时由os回收,分配方式类似于链表。
栈:由操作系统自动分配释放,存放函数的参数值,局部变量的值。

2.堆栈的缓存方式的区别
堆:内存中,存储的是引用数据类型,引用数据类型无法确定大小,堆实际上是一个在内存中使用到内存中零散空间的链表结构的存储空间,堆的大小由引用类型的大小直接决定
栈:是内存中存储值类型的,大小为2M,超出会报错

3.堆栈上数据结构的区别
堆:堆可以看成是一棵树
栈:一种先进后出的数据结构

3.new和delete是如何实现的,与malloc和free有什么异同

1.简单数据类型
简单类型直接分配内存,分配失败不像malloc返回NULL,而是直接抛出异常

2.复杂数据类型
new复杂数据类型先调用operate new,然后在分配的内存上调用构造函数

delete也分两种
1.简单数据类型
delete只调用free
2.复杂数据类型
先用析构函数,再调用operator delete

4.struct与calss的区别

1.内部成员变量及成员函数的默认访问属性:struct默认防控属性是public,而class的默认访问属性是private(类可以很好的实现封装属性)

2.继承关系区别:struct默认是public的,而class是private

3.class可以用于定义模板函数,struct不行

5.const和static的用法

1.static
修饰全局变量
修饰局部变量
修饰静态函数
修饰类的静态成员
修饰类的静态函数

2.const
修饰类成员:const成员变量不能再类定义处初始化,只能通过构造函数初始化列表进行,并且必须有构造函数

修饰类函数:该函数中所有变量均不可改变

发布了29 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_36834959/article/details/104254915