C++虚析构函数

来源:互联网 发布:四平做网站佳业网络 编辑:程序博客网 时间:2024/05/16 09:55

         在C++中,构造函数不能被声明为虚函数,但是析构函数可以被声明为虚函数。只要基类的析构函数被声明为虚函数了,则它的派生类的析构函数,无论是否使用virtual,都将自动被说明为虚函数。

当使用delete运算符和析构函数一起使用时,delete一个对象,则delete隐含对析构函数的调用,如果析构函数不是虚函数,则子类的对象的析构函数将不会被自动调用。


 1 基类的析构函数被声明为虚函数,则它的派生类的析构函数,无论是否使用virtual,都将自动被说明为虚函数。
 2,一般在定义类时,建议都将析构函数声明为虚函数。要镇用。
 3.delease隐含对析构函数的调用,如果析构函数不是虚函数,则子类的对象的析函数将不会被自动调用。

#include <iostream>

class Base

{

private:

   int a;

public:

    Base(int _a)

    {

       a = _a;

    }

   virtual ~Base()

    {

       a = 0;

    }

};


class Derive :public Base

{

private:

   char *str;

public:

    Derive(int _a,const char *_s):Base(_a)

    {

       str = new char[strlen(_s) + 1];

       strcpy(str, _s);

    }

    ~Derive()

    {

       delete str;

    }

};


int main(int argc,const char * argv[])

{

    // insert code here...

   Base *p = newDerive(10, "string");

   delete p;

   return 0;

}



原创粉丝点击