Lv.v

导航

2012年4月29日 #

给我个理由要用虚析构函数

摘要: 什么时候要用虚析构函数?通过基类的指针来删除派生类的对象时,基类的析构函数应该是虚的。否则其删除效果将无法实现。一般情况下,这样的删除只能够删除基类对象,而不能删除子类对象,形成了删除一半形象,从而千万内存泄漏。原因:在公有继承中,基类对派生类及其对象的操作,只能影响到那些从基类继承下来的成员。如果想要用基类对非继承成员进行操作,则要把基类的这个操作(函数)定义为虚函数。那么,析构函数自然也应该如此:如果它想析构子类中的重新定义或新的成员及对象,当然也应该声明为虚的。注意:如果不需要基类对派生类及对象进行操作,则不能定义虚函数(包括虚析构函数),因为这样会增加内存开销。语法如下:class B 阅读全文

posted @ 2012-04-29 16:51 Lv.v 阅读(671) 评论(0) 推荐(0) 编辑

父类指针可以指向子类反之则不行(疑惑)

摘要: 例如:class a{public:int aa};class b:public a{public:int bb;}从内存的来看如a---------||占一个int数据大小--||----(aa数据)------||---------而b则是---------|---------|占一个int数据大小--|占一个Int数据大小--||从a中继承而来------|---(bb数据----------||------------------当定义一个基类类型的指针时a *p;这时,这个指针指向的是a类型的数据当p指针指向派生类的时候,因为p是a类型的指针,所以*p只解释为a类型数据的长度,即—— 阅读全文

posted @ 2012-04-29 09:50 Lv.v 阅读(2131) 评论(0) 推荐(0) 编辑