文章目录

  • 1. 如何避免“野指针”
  • 2. 句柄和指针的区别和联系是什么?
  • 3. new/delete与malloc/free的区别是什么
  • 4. 说一说extern“C”
  • 5. C++中类成员的访问权限

1. 如何避免“野指针”

  • 指针变量声明时没有被初始化。解决办法:指针声明时初始化,可以是具体的地址值,也可让它指向NULL。
  • 指针p被free或者delete之后,没有置为NULL。解决办法:指针指向的内存空间被释放后指针应该指向NULL。
  • 指针操作超越了变量的作用范围。解决办法:在变量的作用域结束前释放掉变量的地址空间并且让指针指向NULL。

2. 句柄和指针的区别和联系是什么?

句 柄 和 指 针 其 实 是 两 个 截 然 不 同 的 概 念 。 W i n d o w s 系 统 用 句 柄 标 记 系 统 资 源 , 隐 藏 系 统 的 信 息 。 你 只 要 知 道 有 这 个 东 西 , 然 后 去 调 用 就 行 了 , 它 是 个 3 2 i t 的 u i n t 。 指 针 则 标 记 某 个 物 理 内 存 地 址 , 两 者 是 不 同 的 概 念 ;

3. new/delete与malloc/free的区别是什么

  • new能自动计算需要分配的内存空间,而malloc需要手工计算字节数
int *p = new int[2];
int *q = (int *)malloc(2*sizeof(int))
  • new与delete直接带具体类型的指针,malloc和free返回void类型的指针。
  • new类型是安全的,而malloc不是。例如int *p = new float[2];就会报错;而int p = m a l l o c ( 2 sizeof(int))编译时编译器就无法指出错误来。
  • new一般分为两步:new操作和构造。new操作对应与malloc,但new操作可以重载,可以自定义内存分配策略,不做内存分配,甚至分配到非内存设备上,而malloc不行。
  • new调用构造函数,malloc不能;delete调用析构函数,而free不能。
  • malloc/free需要库文件stdlib.h的支持,new/delete则不需要!

注 意 : d e l e t e 和 f r e e 被 调 用 后 , 内 存 不 会 立 即 回 收 , 指 针 也 不 会 指 向 空 , d e l e t e 或 f r e e 仅 仅 是 告 诉 操 作 系 统 , 这 一 块 内 存 被 释 放 了 , 可 以 用 作 其 他 用 途 。 但 是 由 于 没 有 重 新 对 这 块 内 存 进 行 写 操 作 , 所 以 内 存 中 的 变 量 数 值 并 没 有 发 生 变 化 , 出 现 野 指 针 的 情 况 。 因 此 , 释 放 完 内 存 后 , 应 该 讲 该 指 针 指 向 N U L L 。

4. 说一说extern“C”

e x t e r n " C " 的 主 要 作 用 就 是 为 了 能 够 正 确 实 现 C + + 代 码 调 用 其 他 C 语 言 代 码 。 加 上 e x t e r n " C " 后 , 会 指 示 编 译 器 这 部 分 代 码 按 C 语 言 ( 而 不 是 C + + ) 的 方 式 进 行 编 译 。 由 于 C + + 支 持 函 数 重 载 , 因 此 编 译 器 编 译 函 数 的 过 程 中 会 将 函 数 的 参 数 类 型 也 加 到 编 译 后 的 代 码 中 , 而 不 仅 仅 是 函 数 名 ; 而 C 语 言 并 不 支 持 函 数 重 载 , 因 此 编 译 C 语 言 代 码 的 函 数 时 不 会 带 上 函 数 的 参 数 类 型 , 一 般 只 包 括 函 数 名 。 这 个 功 能 十 分 有 用 处 , 因 为 在 C + + 出 现 以 前 , 很 多 代 码 都 是 C 语 言 写 的 , 而 且 很 底 层 的 库 也 是 C 语 言 写 的 , 为 了 更 好 的 支 持 原 来 的 C 代 码 和 已 经 写 好 的 C 语 言 库 , 需 要 在 C + + 中 尽 可 能 的 支 持 C , 而 e x t e r n " C " 就 是 其 中 的 一 个 策 略 ;

C++代码调用C语言代码
在C++的头文件中使用
在多个人协同开发时,可能有的人比较擅长C语言,而有的人擅长C++,这样的情况下也会有用到

5. C++中类成员的访问权限

C + + 通 过 p u b l i c 、 p r o t e c t e d 、 p r i v a t e 三 个 关 键 字 来 控 制 成 员 变 量 和 成 员 函 数 的 访 问 权 限 , 它 们 分 别 表 示 公 有 的 、 受 保 护 的 、 私 有 的 , 被 称 为 成 员 访 问 限 定 符 。 在 类 的 内 部 ( 定 义 类 的 代 码 内 部 ) , 无 论 成 员 被 声 明 为 p u b l i c 、 p r o t e c t e d 还 是 p r i v a t e , 都 是 可 以 互 相 访 问 的 , 没 有 访 问 权 限 的 限 制 。 在 类 的 外 部 ( 定 义 类 的 代 码 之 外 ) , 只 能 通 过 对 象 访 问 成 员 , 并 且 通 过 对 象 只 能 访 问 p u b l i c 属 性 的 成 员 , 不 能 访 问 p r i v a t e 、 p r o t e c t e d 属 性 的 成 员

面试准备每日五题:C++(五)——野指针、句柄指针、newdeletemallocfree、extern、类成员权限相关推荐

  1. EETOP版主后端面试问题 每日一题

    转载地址:版主个人空间 转载的csdn地址:csdn地址 后端面试–每日一题(084) Design 4-bit asynchronous counter? how to set timing con ...

  2. 『百日百题 · SQL篇』备战面试,坚持刷题(五)—— 多表查询

    本专栏『百日百题』长期更新,一起加入本刷题计划,一起成长吧!

  3. 爱创课堂每日一题第五十二天- js延迟加载的方式有哪些?

    defer和async.动态创建DOM方式(创建script,插入到DOM中,加载完毕后callBack).按需异步载入js call() 和 apply() 的区别和作用? 作用:动态改变某个类的某 ...

  4. 爱创课堂每日一题第五十六天-对前端界面工程师这个职位是怎么样理解的?它的前景会怎么样?...

    前端是最贴近用户的程序员,比后端.数据库.产品经理.运营.安全都近. 1.实现界面交互 2.提升用户体验 3.有了Node.js,前端可以实现服务端的一些事情 前端是最贴近用户的程序员,前端的能力就是 ...

  5. 爱创课堂每日一题第五十七天-一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?...

    分为4个步骤: (1),当发送一个URL请求时,不管这个URL是Web页面的URL还是Web页面上每个资源的URL,浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询.这 ...

  6. 【】每日360题,2019.11.03日21点财会类考试习题答案

    下列行为不违反银行结算纪律的是().A.出租.出借账户B.签发空头支票C.收到要求付款的汇票后第二 点我找答案 早9点到晚9点,每小时分享一套试题,每套精选30道题,一同学习! 修理车间和锅炉车间的辅 ...

  7. 【】每日360题,2019.11.07日14点财会类考试习题答案

    资产负债表中的"应付职工薪酬"项目如果出现借方余额,应以"一"号填列.()A.正确B.错误请帮忙给出正确答案和分析,谢谢! 点我找答案 早9点到晚9点,每小时分 ...

  8. 数学建模优化模型简单例题_离散型优化问题Ⅱ_数学建模_每日一题(未附代码)附求解规划类问题的建议...

    题Ⅱ Background Information: 某饲料加工厂有9个加工窖.现有一批加工任务,要将16种加工原料按照某种混合方案 一次性放入加工窖中 进行加工.质量>=500kg的加工原料可 ...

  9. 【】每日360题,2019.11.03日18点财会类考试习题答案

    在试用期间被证明不符合录用条件的,用人单位应提前30日通知劳动者,解除劳动合同.()此题为判断题(对,错).请帮忙给出正确答案和分析,谢谢! 点我找答案 早9点到晚9点,每小时分享一套试题,每套精选3 ...

最新文章

  1. msql每个数据前面添加某个字符串查询或者更新
  2. Python 学习笔记: 反射
  3. php实现人员权限管理(用户界面)
  4. angularjs中父,子,兄之间controller值得传递
  5. php ajax loading图片居中显示,ajax+php上次图片
  6. mac安装QT及QT基本使用
  7. java和打印机_java实现打印机打印的区别
  8. Sudoku Extension UVALive - 4763
  9. Phaser开源2d引擎 javascript/html5游戏框架
  10. Go Web编程--应用数据库
  11. 【flink】Flink-Cep实现规则动态更新
  12. 从java 转到 c# 知识点
  13. mysql--------常用命令
  14. vb6 英文和中文长度不同_PPT里中文排版就是没英文好看?你怕是假酒喝多了…...
  15. 3Dmax旋转如何根据固定角度变化
  16. IP地址的认识(一)
  17. 帝国CMS(EmpireCMS) v7.5 后台XSS漏洞复现与原理分析
  18. 雷达感应模组技术,存在感应雷达传感器,智能电视开关机应用
  19. 总谐波失真80_如何将总谐波失真(THD)控制着10%以下?
  20. [漏洞分析] CVE-2022-0847 Dirty Pipe linux内核提权分析

热门文章

  1. Python结合Shell/Hadoop实现MapReduce
  2. js 去除字符串左右两边的空格
  3. [bzoj3450]Tyvj1952 Easy[概率dp]
  4. Linux LVM过程问题
  5. (转载)芹菜拌豆腐皮 降压小凉菜
  6. ExtJs之combobox详解
  7. Spider局域网通讯软件
  8. 转lua解析脚本过程中的关键数据结构介绍
  9. Mybatis笔记 – Po映射类型
  10. Nginx实用教程(二):配置文件入门