永远让基类拥有virtual的destructor

来源:互联网 发布:育知同创怎么样很坑吗 编辑:程序博客网 时间:2024/05/17 23:08

Scott Meyers:世界顶级的C++软件开发技术权威之一。他是两本畅销书Effective C++和More Effective C++的作者,以前曾经是C++ Report的专栏作家。他经常为C/C++ Users Journal和Dr. Dobb's Journal撰稿,也为全球范围内的客户做咨询活动。他也是Advisory Boards for NumeriX LLC和InfoCruiser公司的成员。他拥有Brown University的计算机科学博士学位。

 

据说这小子说过如题的话,我觉得还是有点道理。

最近写个程序,基类指针指向一个new动态分配的子类对象,释放时子类的析够函数没被调用,纳闷了。

 

Base *p_base = new Derived();

delete p_base;

我就用向下类型转换来解决这个问题,但心中总有些犹豫。

delete dynamic_cast<Derived *>(p_base);

很多时候会忘记这个转换的,那么少了个析够函数的调用会导致诸多问题,有没有自动的解决办法呢,自己也没有多想,原来是基类的析够函数没有声明成虚拟的。