【c++深度解析15】 经典问题解析

关于动态内存分配:
1.new 和 malloc 的区别是什么?

  new 关键字是c++的一部分

malloc是由c库提供的函数

new以具体类型为单位进行内存分配

malloc 以字节为单位进行内存分配

new 在申请内存空间时可以进行初始化(自动调用构造函数)

malloc仅根据需要申请定量的内存空间

关于虚函数:

构造函数是否可以成为虚函数?

答:构造函数不可能成为虚函数,因为在构造函数执行结束后,虚函数表指针才会被正确的初始化

析构函数是否可以成为虚函数

答:建议在设计会被继承的基类时,将析构函数声明为虚函数

关于多态:

构造函数和析构函数中是否可能发生多态?

构造函数中不可能发生多态行为,在构造函数执行时,虚函数表指针未被正确初始化

析构函数中不可能发生多态行为,在析构函数执行时,虚函数表指针已经被销毁

若在构造函数和析构函数中调用多态,则程序只会调用当前类中定义的函数版本

关于强制类型转换:

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

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

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

指针: 转换成功:得到目标类型的指针

            转换失败:得到一个空指针

引用: 转换成功:得到目标类型的引用

            转换失败: 得到一个异常操作信息

猜你喜欢

转载自blog.csdn.net/lvmengzou/article/details/87034643