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

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

Linda Hamilton
Linda Hamilton原创
2024-12-28 06:21:17807浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn