为什么有的类把析构函数定义为protected?
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/10/07 02:15:38
为什么有的类把析构函数定义为protected?
如果一个类被继承,同时定义了基类以外的成员对象,且基类析构函数不是virtual修饰的,那么当基类指针或引用指向派生类对象并析构(例如自动对象在函数作用域结束时;或者通过delete)时,会调用基类的析构函数而导致派生类定义的成员没有被析构,产生内存泄露等问题.虽然把析构函数定义成virtual的可以解决这个问题,但是当其它成员函数都不是virtual函数时,会在基类和派生类引入vtable,实例引入vptr造成运行时的性能损失.如果确定不需要直接而是只通过派生类对象使用基类,可以把析构函数定义为protected(这样会导致基类和派生类外使用自动对象和delete时的错误,因为访问权限禁止调用析构函数),就不会导致以上问题.
====
[原创回答团]
====
[原创回答团]
C++ pi的定义我定义了类CTextclass CText:public CDraw{...protected:con
为什么有的地区把英语字母读为一声 有的为四声.
为矩形类定义复制构造函数
为什么把质数定义为大于1的正整数?
为什么把近代科学的诞生定义为“思想解放运动”
为什么把冥王星定义为天蝎座的守护星
高中数学已经把函数定义为数集之间的映射f,为什么仍然把函数值f(x)称作函数?
为什么定义函数指针指向函数 该指针的值不为函数名的值
通常把计算机网络定义为什么?
为什么求左右导数时必须用导数的原始定义式而不能用已经有的现成的基本初等函数的导数公式来求
世界卫生组织把健康定义为?
int n,a[400001];为什么要把这个定义在主函数之前,它跟定义在主函数之后有什么区别