Lv.v

导航

04 2012 档案

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

posted @ 2012-04-29 16:51 Lv.v 阅读(681) 评论(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 阅读(2139) 评论(0) 推荐(0)

类型转换总结
摘要:C++里,对象类型转化问题是需要严加注意的一个问题,包括隐式转换,强制转化,旧式转化等种类,需要加以总结。本篇文章概括总结类型转化问题,并侧重于类型的隐式转换问题。关于强制转换的详细的内容放在下篇文章中总结。一。类型相关:如果两个类型可以相互转换,则称这两个类型相关。只用相关类型之间才可能发生隐式类型或显示类型转换。1.算术类型之间的转换:算术类型指不包括void的内置类型,算术类型之间可以相互转换。 转换规则根据不同的转换条件而不同2.算术类型和bool类型之间的转换:可将算术对象转换为bool类型,bool对象也可以转换为int型3.整型和枚举类型:自动将枚举类型的对象或者成员转换为整型4 阅读全文

posted @ 2012-04-28 17:30 Lv.v 阅读(518) 评论(0) 推荐(0)

对象的内存布局
摘要:首先介绍一下C++中有继承关系的类对象内存的布局:在C++中,如果类中有虚函数,那么它就会有一个虚函数表的指针__vfptr,在类对象最开始的内存数据中。之后是类中的成员变量的内存数据。 对于子类,最开始的内存数据记录着父类对象的拷贝(包括父类虚函数表指针和成员变量)。 之后是子类自己的成员变量数据。 对于子类的子类,也是同样的原理。但是无论继承了多少个子类,对象中始终只有一个虚函数表指针。 为了探讨C++类对象的内存布局,先来写几个类和函数 首先写一个基类: class Base{public:virtual void f() { cout << "Base::f&qu 阅读全文

posted @ 2012-04-28 15:15 Lv.v 阅读(738) 评论(0) 推荐(0)

DLL相关注意
摘要:Dynamic Library.h源码如下:#pragma once //extern "C" _declspec(dllexport) int _stdcall add(int a=10,int b=10); //利用关键字导出//extern __declspec(dllexport) int i;class _declspec(dllexport) DLLTest //利用关键字导出类{public: int a; DLLTest(); ~DLLTest();};Dynamic Library.cpp源码如下:#include <windows.h>#in 阅读全文

posted @ 2012-04-27 12:33 Lv.v 阅读(196) 评论(0) 推荐(0)