前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >指针与引用相关面试题

指针与引用相关面试题

作者头像
海盗船长
发布2022-11-02 18:09:57
2820
发布2022-11-02 18:09:57
举报
文章被收录于专栏:基础知识文章基础知识文章
1.指针和引用的差别?
  • 非空区别。在任何情况下都不能使用指向空值的引用。一个引用必须总是指向一个对象。不存在指向空值的引用这个事实意味着使用引用的代码效率会更高。
  • 合法性区别。在使用引用之前不需要检测它的合法性。相反,指针则应该总是被测试,防止其为空。
  • 可修改区别。指针和引用的一个重要区别是指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的其内容可以修改。
  • 应用区别。在以下情况应该使用指针:一是考虑到存在不指向任何对象的可能,二是需要能够在不同的·时刻指向不同的对象。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么应该使用引用。
空指针和迷途指针的区别是什么?
  • 当delete一个指针的时候,实际上仅是让编译器释放内存,但指针本身依然存在。这时它就是一个迷途指针。
  • 使用迷途指针或空指针是非法的,而且有可能会造成程序奔溃。
C++中有了malloc/free,为什么还需要new/delete?
  • malloc与free是C/C++语言的标准库函数,new/delete是C++的运算符。他们都可用于申请动态内存和释放内存。
  • 对于非内部数据结构类型的对象而言,只用malloc/free无法满足动态对象的要求。对象在构建的同时要自动执行构造函数,对象在消亡的时候要自动执行析构函数。
  • 由于malloc/free是库函数而不是用算符,不在编译期控制范围内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
  • 因此C++语言需要将一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。new/delete不是库函数而是运算符。
this指针
  1. this指针本质是一个函数参数,只是编译器隐藏起形式的,语法层面上的参数。 this指针只能在成员函数中使用,全局函数,静态函数都不能使用this指针。
  2. this在成员函数的开始前构造,在成员的结束后清除。当调用一个类的成员函数时,编译器将类的指针作为函数的this函数传递过去
  3. this指针并不占用对象的空间。 this相当于非静态成员函数的一个隐含的参数,不占用对象空间。他跟对象之间没有包含关系,只是当前调用函数的对象被它指向而已。
  4. this在成员函数的开始执行前创建,在成员的执行结束后清除。
  5. this指针会因为编译器的不同而有不同的存放位置。可能是堆、栈,也可能是寄存器。
  6. this指针只有在成员函数中才有定义。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.指针和引用的差别?
  • 空指针和迷途指针的区别是什么?
  • C++中有了malloc/free,为什么还需要new/delete?
  • this指针
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档