首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

C++各种构造函数的写法(3)

C++各种构造函数的写法(3)

      五、关于虚析构      
  虚析构一般伴随着多态而产生,多态主要方式就是用基类的指针或引用指向或引用派生类,而形成多态。
  但是这样就会存在一个问题,当我们析构的时候,由于是基类的指针,就会调用的是基类的构造函数,从而造成派生内存溢出。为了解决这个问题,引入了虚析构的概念。将基类的构造函数声明为虚,从而使其在调用析构函数的时候能够准确的调用派生类的析构函数。
  如下代码必须用到虚析构才能准确的析构派生类,并释放其占有内存。
    1 class Base 2 { 3 public: 4     Base(int b) : m_b(b) 5     { 6     } 7     //虚析构,使基类指针能准确的释放所指向的派生类里面的内容 8     virtual ~Base() 9     {10     }11 private:12     int m_b;13 };14 15 class Derived : public Base16 {17 public:18     Derived(int b, char *pStr) : Base(b)19     { 20         m_pStr = new char[strlen(pStr)+1];21         strcpy(m_pStr,pStr);22     }23     ~Derived()24     {25         delete m_pStr;26         m_pStr = NULL;27     }28 private:29     char *m_pStr;30 };31 32 int main(void)33
{34     char *pStr = "abcdefg";35     Base *b = new Derived(1,pStr);36     delete b;37 38     return 0;39 }
继承事业,薪火相传
返回列表