为什么有的类把析构函数定义为protected?

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/12 10:07:38
为什么有的类把析构函数定义为protected?

为什么有的类把析构函数定义为protected?
为什么有的类把析构函数定义为protected?

为什么有的类把析构函数定义为protected?
如果一个类被继承,同时定义了基类以外的成员对象,且基类析构函数不是virtual修饰的,那么当基类指针或引用指向派生类对象并析构(例如自动对象在函数作用域结束时;或者通过delete)时,会调用基类的析构函数而导致派生类定义的成员没有被析构,产生内存泄露等问题.虽然把析构函数定义成virtual的可以解决这个问题,但是当其它成员函数都不是virtual函数时,会在基类和派生类引入vtable,实例引入vptr造成运行时的性能损失.如果确定不需要直接而是只通过派生类对象使用基类,可以把析构函数定义为protected(这样会导致基类和派生类外使用自动对象和delete时的错误,因为访问权限禁止调用析构函数),就不会导致以上问题.
====
[原创回答团]

为什么有的类把析构函数定义为protected? 函数定义人教版所有的定义 求高中所有的函数及其定义 高中数学已经把函数定义为数集之间的映射f,为什么仍然把函数值f(x)称作函数? 为什么把质数定义为大于1的正整数? 为什么把近代科学的诞生定义为“思想解放运动” 为什么把一个圆周角定义为360°? 为什么把企业定义为具有法人资格的经济组织? 请问真值函数的定义是什么?能否为我详尽地列举所有的一元真值函数?请给出的定义要准确,列举的要全面, 1.在一个类的定义中,包含有( )成员的定义.A.数据 B.函数 C.数据和函数 D.数据或函数2.( )只能访问静态成员变量A静态成员函数 B虚函数 C构造函数 D析构函数3.假定AA为一个类,a为该类公有的 为什么要把函数展开为幂级数? 为什么有的地区把英语字母读为一声 有的为四声. 幂级数求和函数先求导还是先积分怎么确定的?如题 和函数求法 为什么有的题先求导 有的先积分?目的是不是都是要把n消去 转化为等比数列? 为什么把冥王星定义为天蝎座的守护星根据什么原因把行星定义为守护星 请问try .catch函数的用法及定义catch(...)为什么有的代码里catch括号里直接添省略号, 通常把计算机网络定义为什么? 定义一个点类Point,成员变量包含x,y坐标,成员函数包含构造函数(无参和两个参数的构造函数),析构函数,输出坐标x,y的函数Show.要求:成员变量为受保护成员,成员函数为公有函数;函数Show在 为什么定义函数指针指向函数 该指针的值不为函数名的值为什么定义函数指针指向函数 该指针的值不为函数名的值