小编Seb*_*der的帖子

基类中的非虚析构函数,但派生类中的虚析构函数会导致分段错误

最近在求职面试中,当基类的析构函数未被声明为虚拟时,我被问及派生类中的内存泄漏问题.

我写了一个小测试来确认我的答案,但我发现了一些有趣的东西.显然,如果你Derived通过创建一个对象new但将其指针存储为a Base*,如果指针被删除,则不会调用派生对象的析构函数(这对我对问题的回答非常多).

我认为派生类的析构函数是否是虚拟的在这种情况下是相关的,但在我的系统上,以下代码显示:

#include <iostream>
#include <string>

// just a helper class, printing its name out when it is destructed
class PrintOnDestruct
{
    public:
        PrintOnDestruct( const std::string& name )
        : name_( name )
        {}

        ~PrintOnDestruct()
        {
            std::cout << "Destructing: " << name_ << std::endl;
        }

    protected:

        std::string name_;
};

// the Base class
class Base
{
    public:
        Base()
        {
            print_on_destruct_ = new PrintOnDestruct( "Base" );
        }

        // the destructor is NOT virtual!
        ~Base()
        { …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism inheritance destructor

7
推荐指数
1
解决办法
2372
查看次数

标签 统计

c++ ×1

destructor ×1

inheritance ×1

polymorphism ×1