网站设计前期沟通单,致远oa协同管理系统,网店网站开发,河北邯郸是几线城市析构函数的名称统一处理为destructor的目的是为了解决析构函数的重写。 而这又引出了一个问题#xff1a;为什么要进行析构函数的重写#xff1f; 是为了下面这种情况#xff1a;
class Person
{
public:~Person() { cout ~Person endl; }
}…析构函数的名称统一处理为destructor的目的是为了解决析构函数的重写。 而这又引出了一个问题为什么要进行析构函数的重写 是为了下面这种情况
class Person
{
public:~Person() { cout ~Person endl; }
};
class Student : public Person
{
public:~Student() { cout ~Student endl; }
};
int main()
{Person* p new Person;delete p;p new Student;delete p;return 0;
}打印结果 上面的代码可能存在内存泄漏的问题 原因p new Student; delete p;这段代码我们本意是想调用student的析构函数在继承中调用派生类的析构函数时会自动调用基类的析构函数。即调用student的析构函数 调用student的析构函数 person的析构函数但它却只是调用了person的析构函数。
即 本意根据指针(引用)指向的对象类型来选择对应的析构函数 结果根据指针(引用)的类型的来选择对应的析构函数 而根据指针(引用)指向的对象类型来选择对应的函数这不就是多态的理念吗。 此时我们已经满足多态构造的2个条件的其中之一基类的指针或引用 剩下的我们需要满足派生类的析构函数构成基类析构函数的重写。而重写的条件是返回值类型函数名参数列表都相同。对于析构函数我们需要的就是函数名相同因此将析构函数的名称统一处理为destructor. 处理后