析构函数何时该时虚拟的? 当你可能通过基类指针删除派生类对象时。 虚函数绑定到对象的类的代码,而不是指针/引用的类。如果基类有虚析构函数,delete basePtr时(译注:即基类指针),*basePtr 的对象类型的析构函数被调用,而不是该指针的类型的析构函数。这通常是一件好事情。以上摘...
分类:
其他好文 时间:
2015-05-18 20:43:17
阅读次数:
125
//正确使用虚析构函数
//使用虚析构函数,当delete删除一个对象时,能确保析构函数正确执行(动态)
#include
using namespace std;
class B
{
public:
B()
{
cout<<"B"<<endl;
}
virtual void fun()
{
cout<<"B::fun()"<<endl;
}
virtual ~B()
/...
分类:
编程语言 时间:
2015-05-13 10:41:38
阅读次数:
136
如果使用到了多态,则需要在base class中写一个虚析构函数目的是销毁继承类:
上面的base class通常有其他虚成员函数。如果类中没有虚成员函数,也就是类不打算作为base class使用则在类中写了个虚析构函数是错误的:
注意:...
分类:
其他好文 时间:
2015-05-12 23:05:10
阅读次数:
154
**在调用析构函数中出现的异常有两种方法:
一是调用abort强制结束程序:**
二是吞下异常:
**更好的办法是:
针对某一个可能在析构函数中出现异常的部分,为用户提供该部分函数的调用放法从而给用户处理异常的机会:**
注意:...
分类:
其他好文 时间:
2015-05-12 23:04:38
阅读次数:
146
在类中,有两个与众不同的成员函数,那就是构造函数和析构函数。当构造函数与析构函数遭遇继承和多态,它们的运行状况又会出现什么变化呢? 多态性是在父类或各子类中执行最合适成员函数。一般来说,只会选择父类...
分类:
编程语言 时间:
2015-05-06 08:03:37
阅读次数:
128
虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象。 如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个虚函数表,使得对象的体积翻倍,还有可能降低其可移植性。 所以基本的一条是:无故的...
分类:
其他好文 时间:
2015-04-10 13:20:16
阅读次数:
123
本文的11个问题提取自《C++沉思录》第四章。所有问题的说明均为自己补充。
1 你的类需要一个构造函数吗?
2 你的数据成员是私有的吗?
3 你的类需要一个无参构造函数吗?
4 你的类需要一个虚虚析构函数吗?
5 你的类需要复制构造函数吗?
6 你的类需要一个赋值运算符吗?
7 const总是很重要!...
分类:
编程语言 时间:
2015-04-08 15:02:55
阅读次数:
188
1 C++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定,两个条件(基类引用或指针、虚函数)缺一不可 虚函数的默认实参将发生静态绑定2 继承层次的根类一般都需要定义虚析构函数3 任意非static成员都可以是虚析构函数,static成员函数不能是虚析构函数(应为static成员不是属于某个对...
分类:
编程语言 时间:
2015-03-30 22:33:06
阅读次数:
172
7.为多态基类声明虚析构函数 1.为多态基类声明虚析构函数 code1: class A{ public: int* a; A():a(new int(5)) {} ~A(){ delete a; } }; class B:public A { public: int *b; B():b(new i...
分类:
其他好文 时间:
2015-03-29 19:31:34
阅读次数:
127
代码一、#include using namespace std;class Base{public: Base(){}; ~Base() { cout using namespace std;class Base{public: Base(){}; vi...
分类:
编程语言 时间:
2015-03-19 11:26:02
阅读次数:
147