【发布时间】:2011-03-21 04:09:13
【问题描述】:
我有
struct IMyInterface
{
virtual method1() = 0;
virtual method2() = 0;
};
GCC 坚持我有
struct IMyInterface
{
virtual method1() = 0;
virtual method2() = 0;
virtual ~IMyInterface(){};
};
我不明白为什么。纯粹的界面就是界面(duh)。析构函数是接口具体实现者内部实现细节的一部分;它不构成接口的一部分。我了解整个切片问题(或者至少我认为我了解)
所以我的问题是 - GCC 坚持这样做是否正确?如果是,为什么?
【问题讨论】:
-
您在谈论析构函数,但您的代码显示了一个构造函数。问题是什么?
-
编程规则 1:编译器永远是对的。编程规则 2:如果编译器错误,则适用规则 1。
-
你可以有一个纯虚析构函数 (
virtual ~IMyInterface() = 0;) 但如果链接器抱怨缺少定义,你实际上仍然可以提供纯虚函数的实现,即。virtual ~IMyInterface() = 0 {}.