读书笔记: effetive C++ 条款14:总是让base class拥有virtual desctructor , 体现了virtual对多态的支持
2015-02-28 20:24
288 查看
virtual 的作用是多态,virtual表可以在running time时候判断指针指向的具体类型
Class base{
base();
~base();
}
Class Derived : public base
{
Derived();
~Derived();
}
Derived* p = new Derived ;
delete p;
以上代码隐含了调用下面的函数
1)基类的构造函数
2)派生类的构造函数
3)派生类的析构函数
4)基类的析构函数
但是如果指针是基类类型的,但是指向派生类的
Base* p = new Derived ;
delete p;
以上代码隐含了调用下面的函数
1)基类的构造函数
2)派生类的构造函数
3)基类的析构函数
这是因为析构函数没有定义为虚函数,没有虚函数表建立, 所以就没有办法实现多态。
如果基类的析构函数定义为虚函数,那么无论指针是什么类型的,只要是指向派生类,那么在析构的时候都会调用派生类和基类的析构函数。
所以说派生和virtual 并无直接关系。
Class base{
base();
~base();
}
Class Derived : public base
{
Derived();
~Derived();
}
Derived* p = new Derived ;
delete p;
以上代码隐含了调用下面的函数
1)基类的构造函数
2)派生类的构造函数
3)派生类的析构函数
4)基类的析构函数
但是如果指针是基类类型的,但是指向派生类的
Base* p = new Derived ;
delete p;
以上代码隐含了调用下面的函数
1)基类的构造函数
2)派生类的构造函数
3)基类的析构函数
这是因为析构函数没有定义为虚函数,没有虚函数表建立, 所以就没有办法实现多态。
如果基类的析构函数定义为虚函数,那么无论指针是什么类型的,只要是指向派生类,那么在析构的时候都会调用派生类和基类的析构函数。
所以说派生和virtual 并无直接关系。
相关文章推荐
- 《Effective C++》条款14 总是让base class拥有virtual destructor
- 读书笔记_Effective_C++_条款七:为多态基类声明virtual析构函数
- 读书笔记_Effective_C++_条款四十一:了解隐式接口和编译期多态
- 读书笔记_Effective_C++_条款三十五:考虑virtual函数以外的其他选择
- 【C++面向对象】类继承、多态与virtual成员
- 读书笔记_Effective_C++_条款六:若不想使用编译器自动生成的函数,就该明确拒绝
- c++多态的一个简单体现
- 读书笔记_Effective_C++_条款五:了解C++默默编写并调用哪些函数
- C++支持的多态方式
- 读书笔记_Effective_C++_条款十:令operator=返回一个reference to *this
- 读书笔记_Effective_C++_条款四:确定对象被使用前已先被初始化
- C++总是能让我想起什么(9)——C++与C#的多态
- 读书笔记_Effective_C++_条款八:别让异常逃离析构函数
- C++中对多态的支持
- 条款07:为多态基类声明virtual析构函数(Declare destructors virtual in polymorphic base classes.)
- More Effective C++ 读书笔记 之 不以多态方式处理数组
- 读书笔记_Effective_C++_条款二:尽量以const, enum, inline替换#define
- 读书笔记-Thinking in C++-第15章 多态和虚函数
- OOP Bisic-desctructor can be virtual,while constructer can not? why?
- 伪多态的循环链表C++实现【多类型支持】