c++虚析构函数:
原因:避免多态操作时的内存泄漏(子类没有进行delete操作)
做法:父类的析构函数前加上一个 Virtual
C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明:
有下面的两个类:
class ClxBase
{
public:
ClxBase() {};
virtual ~ClxBase() {};
virtual void DoSomething() { cout << "Do something in class ClxBase!" << endl; };
};
class ClxDerived : public ClxBase
{
public:
ClxDerived() {};
~ClxDerived() { cout << "Output from the destructor of class ClxDerived!" << endl; };
void DoSomething() { cout << "Do something in class ClxDerived!" << endl; };
};
代码
ClxBase *pTest = new ClxDerived;
pTest->DoSomething();
delete pTest;
的输出结果是:
Do something in class ClxDerived!
Output from the destructor of class ClxDerived!
这个很简单,非常好理解。
但是,如果把类ClxBase析构函数前的virtual去掉,那输出结果就是下面的样子了:
Do something in class ClxDerived!
也就是说,类ClxDerived的析构函数根本没有被调用!一般情况下类的析构函数里面都是释放内存资源,而析构函数不被调用的话就会造成内
存泄漏。
inline 内联函数
要点:
声明后,必须立马实现; 不一定能够声明成功;能省去函数调用的开销(入栈,跳转等),但开销大
inline void fun()
{
printf("asd");
}
int main(void)
{
fun(); //等价于直接调用函数体, 如下所示
//{
//printf("asd");
//}
return 0;
}