原文:不要在基类析构函数中调用纯虚函数,否则运行时会报错“pure virtual method called”

如上。 这是因为:delete派生类对象时,先调用派生类的析构函数,然后再调用基类的析构函数 此时如果调用纯虚函数的话,派生类的对象已经被破坏了,所以会报错。 http: www.cnblogs.com cswuyg archive .html ...

2014-09-15 17:17 0 4058 推荐指数:

查看详情

C++基类析构函数为什么要用virtual析构函数

知识背景 要弄明白这个问题,首先要了解下C++的动态绑定。 关于动态绑定的讲解,请参阅: C++的动态类型与动态绑定、函数、多态实现 正题 直接的讲,C++基类采用virtual析构函数是为了防止内存泄漏。具体地说 ...

Wed Aug 31 18:32:00 CST 2016 1 33099
绝对不要在 构造函数析构函数 调用函数

今天为了查一个重复delete的bug,在析构函数调用了一个函数 toString,想在对象析够前打印对象信息,结果发现打印出来全都是基类的,后来仔细研究了这个问题,先说结论: 1,绝对不要在构造函数析构函数调用函数,他们都不是动态绑定的。 2,如果析构函数函数 ...

Sun Feb 21 07:19:00 CST 2016 0 1774
为什么基类析构函数函数

注:本文章内容大部分来自网站整理。 1.为什么基类析构函数函数?   在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。   下面转自网络:源地址 http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html ...

Wed Jul 11 00:06:00 CST 2012 0 5171
【C++】不要在构造函数析构函数调用函数

  这个问题来自于《Effective C++》条款9:永远不要在构造函数析构函数调用函数 。   假设有如下代码:    现在,请分析执行下列代码调用时所发生的事情:   很明显,一个 BuyTransaction类构造器被调用。但是,首先调用 ...

Mon Aug 24 19:31:00 CST 2015 0 5023
为什么基类析构函数要写成函数

为什么基类析构函数要写成函数? 答:在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。 代码说明如下 第一段代码: 运行结果: Do something in class ClxDerived! Output from ...

Tue May 08 20:22:00 CST 2018 0 1011
多态基类析构函数应该为函数

CBird作为基类描述鸟类的一般行为和属性,因为不同鸟类的飞行特点不同,所以基类CBird将fly()声明为virtrual,希望派生类重写(overriding)该方法。CLark(lark:百灵鸟)继承自CBird,并重写了fly()。 main函数基类CBird类型指针指向 ...

Tue Mar 12 17:37:00 CST 2013 0 3813
C++基类析构函数定义为函数的原因

1:每个析构函数只会清理自己的成员(成员函数前没有virtual)。2:可能是基类的指针指向派生类的对象,当析构一个指向派生类的成员的基类指针,这时程序不知道这么办,可能会造成内存的泄露,因此此时基类析构函数要定义为函数基类指针可以指向派生类的对象(多态),如果删除该指针delete[]p ...

Tue Feb 19 20:00:00 CST 2019 0 934
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM