[原创]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

请按任意键继续. . .

 

结论:

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

原文链接: https://www.cnblogs.com/ffbear/archive/2012/08/20/2647615.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/60271

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午9:24
下一篇 2023年2月9日 上午9:24

相关推荐