c++ - C++ 'interfaces' 是否应该有一个虚拟析构函数

标签 c++

Possible Duplicate:
Destructors for C++ Interface-like classes

考虑一个用于对接口(interface)建模的 C++ 抽象类的简单示例:

class IAnimal
{
  virtual void walk()=0;
  virtual ~IAnimal(){}
};

有析构函数更好,还是没有?我不认为析构函数可以是纯虚拟的,至少我的测试给出了链接器错误,所以应该包含一个空的析构函数吗?

编辑:抱歉,错字。它是析构函数而不是构造函数。

最佳答案

您应该始终使用带接口(interface)的虚拟析构函数。举个例子:

IAnimal* animal = new Lion();
delete animal;

现在它将使用什么析构函数?肯定不是 Lion 的析构函数,因为接口(interface)不知道 Lion 的析构函数

因此,如果您的界面没有内存管理,请使用此功能:

virtual ~IAnimal(){}

关于c++ - C++ 'interfaces' 是否应该有一个虚拟析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3628529/

相关文章:

c++ - 在 Linux 上进行 3d 编程应该使用什么环境?

c++ - gcc编译C++代码: undefined reference to `operator new[](unsigned long long)'

c++ - QT插槽没有在主线程上被调用

c++ - 我的代码是未定义的行为吗

c++ - 项目错误 : Unknown module(s) in QT: winextras

c++ - 静态成员函数中的 `this` 类型?

c++ - 传递具有模板化返回类型的 std::function 类型

c++ - 将对象添加到 vector 时出现编译器错误

c++ - GetAdaptersInfo 的缓冲区大小

c++ - 继承类的构造函数格式