加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C继承:缺少虚拟析构函数会导致内存泄漏吗?

发布时间:2020-12-16 06:46:16 所属栏目:百科 来源:网络整理
导读:参见英文答案 Possible memory leak without a virtual destructor?????????????????????????????????????3个 我对自己经常问自己的一个问题表示怀疑,这就是情况: 两个类,没有虚拟析构函数 class Base{ int myInt;};class Derived : public Base{ int myInt
参见英文答案 > Possible memory leak without a virtual destructor?????????????????????????????????????3个
我对自己经常问自己的一个问题表示怀疑,这就是情况:

两个类,没有虚拟析构函数

class Base
{
    int myInt;
};

class Derived : public Base
{
    int myIntDerived;
};

int main()
{
    Base    *base    = new Derived;
    Derived *derived = new Derived;

    delete base;
    delete derived;
}

说第一次删除会导致内存泄漏而第二次删除会不会是正确的?

解决方法

Is it right to say that the first delete causes a memory leak while the second one its fine?

第二个确实很好(虽然,你不想直接在实际程序中删除指针.一个应该使用智能指针),但你的第一个语句并不完全正确.

形式上,通过指向具有非虚拟析构函数的基础子对象的指针删除对象具有未定义的行为.内存泄漏是可能的,但不是必需的.实际上,在您的情况下,由于派生或其任何成员对象都没有分配任何将在析构函数中释放的动态内存,因此可能不会发生泄漏.

当程序具有未定义的行为时,内存是否泄漏是您最不关心的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读