首页 > 后端开发 > C++ > C 中的抽象基类应该有纯虚拟析构函数吗?

C 中的抽象基类应该有纯虚拟析构函数吗?

Linda Hamilton
发布: 2024-12-28 06:21:17
原创
800 人浏览过

Should Abstract Base Classes in C   Have Pure Virtual Destructors?

C 中的纯虚拟析构函数

在面向对象编程的世界中,抽象基类通常需要纯虚拟析构函数。然而,在编写如下代码时会出现问题:

class A {
public:
    virtual ~A() = 0;
};
登录后复制

这提出了一个问题:抽象基类拥有纯虚拟析构函数是否可以接受。虽然 Microsoft Visual C 编译它没有问题,但运行时会发生什么?

答案是:未定义的行为。如果从 A 派生的类的实例被删除或销毁,则将调用 A 的析构函数。然而,由于它是纯粹虚拟的并且缺乏实现,这会触发未定义的行为。在某些平台上,这可能会导致调用 purecall 处理程序,从而导致崩溃。

为了避免这种情况,实现析构函数也至关重要。像这样的最小实现就足够了:

class A {
public:
    virtual ~A() = 0;
};

inline A::~A() { }
登录后复制

这样,当派生类的实例被删除时,A 的析构函数不会导致未定义的行为。

以上是C 中的抽象基类应该有纯虚拟析构函数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板