第五十五课 问题解析

第五十五课 问题解析

一、new 和 malloc 的区别和 delete 和 free 的区别是什么?

  • new 和 malloc 的区别

    new 关键字是C++的一部分,malloc 是由C库函数提供

    new以具体类型为单位进行内存分配,malloc以字节为单位进行内存分配

    new在申请内存空间时可以进行初始化,malloc仅根据需要申请定量内存的空间

    new在所有C++编译器中都被支持,malloc 早某些系统开发中不能调用

    new能够出发构造函数的调用,malloc仅分配需要的空间

    对象的创建只能用new,malloc不适合面向对象的开发

  • delete和free的区别

    delete在所有C++编译器中都被支持,free在某些系统开发中不能调用

    delete能够出发析构函数的调用,free仅归还之前分配的内存空间

    对象销毁只能用delete,free不适合面向对象开发

二、构造函数和析构函数时候可以成为虚函数

  • 构造函数不可能成为虚函数

    在构造函数执行结束后,虚函数表指针才会被正确初始化

  • 析构函数可以成为虚函数

    建议在声明类时,将析构函数声明为虚函数

三、构造函数和析构函数是否可以发生多态

  • 构造函数里面不可能发生多态行为

    在构造函数执行时,虚函数表指针未被正确初始化

  • 虚构函数中不可能发生多态

    析构函数执行时,虚函数表指针已经被销毁

四、继承中如何正确的使用强制类型转换

  • dynamic_cast 是与继承相关的类型转换关键字

  • dynamic_cast 要求相关函数的类中必须有虚函数

  • 用于有直接或者间接继承关系的指针(引用)之间

    指针:

    • 转换成功:得到目标类型的指针
    • 转换失败:得到一个空指针

    引用:

    • 转换成功:得到目标类型的引用
    • 转换失败:得到一个异常操作信息
  • dynamic_cast 编译器会检查是否使用正确

  • 类型转换的结果只能在运行阶段才能看得到

五、小结

  • new /delete 会触发构造函数/析构函数的调用
  • 构造函数不能成为虚函数
  • 析构函数可以成为虚函数
  • 构造函数和析构函数都无法产生多态性为
  • dynamic_cast是与继承相关的专用关键字
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值