构造函数为什么一般不定义为虚函数?而析构函数一般写成虚函数的原因 ?
函数 为什么 定义 原因 一般 构造函数 写成
2023-06-13 09:15:29 时间
浏览量 3
1、构造函数不能声明为虚函数
1)因为创建一个对象时需要确定对象的类型,而虚函数是在运行时确定其类型的。而在构造一个对象时,由于对象还未创建成功,编译器无法知道对象的实际类型,是类本身还是类的派生类等等
2)虚函数的调用需要虚函数表指针,而该指针存放在对象的内存空间中;若构造函数声明为虚函数,那么由于对象还未创建,还没有内存空间,更没有虚函数表地址用来调用虚函数即构造函数了
2、析构函数最好声明为虚函数,首先析构函数可以为虚函数,当析构一个指向派生类的基类指针时,最好将基类的析构函数声明为虚函数,否则可以存在内存泄露的问题。如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除指向派生类的基类指针时,只会调用基类的析构函数而不调用派生类析构函数,这样就会造成派生类对象析构不完全。子类析构时,要调用父类的析构函数吗?析构函数调用的次序时先派生类后基类的。和构造函数的执行顺序相反。并且析构函数要是virtual的,否则如果用父类的指针指向子类对象的时候,析构函数静态绑定,不会调用子类的析构。不用显式调用,会自动调用。
相关文章
- 实战中遇到的C++流文件重置的一个大陷阱 为什么ifstream的seekg函数无效
- 【说站】css中couters函数是什么
- OpenCV论道:为什么我的伽马校正函数只有一行?[通俗易懂]
- listagg oracle10_HLOOKUP函数
- 【不是问题的问题】为什么复位中断服务程序里面直接调用的main函数,难道所有程序都在复位中断里面执行的?
- 窗口函数为什么更容易出现性能问题?——一个优化案例
- PHP 常用功能函数
- WordPress 为什么要创建 wp_strip_all_tags 函数
- SQL开发知识:oracle中的greatest least函数代码详解
- 函数学习Linux:理解atoi函数(linuxatoi)
- MySQL Str函数实现数据类型转换(mysqlstr)
- Linux 下的内存分配函数 malloc 用法详解(malloclinux)
- 提高Oracle运行效率减少耗时函数的使用(oracle中耗时的函数)
- php下过滤html代码的函数提高程序安全性
- 精通JavaScript纠正cleanWhitespace函数
- JavaScript去除空格的三种方法(正则/传参函数/trim)