[原创]C++虚函数的陷阱

 

近日发现开发的一个程序有个指针被重复删除了,跟踪检查后发现是虚函数不够‘虚’导致重复删除造成的。

请看实例代码

#include "stdafx.h"

#include <iostream>

 

class Base

{

public:

    Base()

    {

        fun();

    }

 

    virtual ~Base()

    {

        fun();

    }

 

    virtual void fun()

    {

        std::cout << "Base::fun" << std::endl;

    }

};

 

class Sub : public Base

{

public:

    Sub()

    {

        fun();

    }

 

    ~Sub()

    {

        fun();

    }

 

    virtual void fun()

    {

        std::cout << "Sub::fun" << std::endl;

    }

 

};

 

void main()

{

    Sub* pSub = new Sub;

    delete pSub;

}

输出:

Base::fun

Sub::fun

Sub::fun

Base::fun

请按任意键继续. . .

 

结论:

在构造函数/析构函数里虚函数是不起作用的。原因也很好理解,子类还未构造何来虚函数,子类已经析构何来虚函数。

posted @ 2012-08-20 15:23  胖胖熊  阅读(165)  评论(0编辑  收藏  举报