pm1*_*100 10 c++ virtual-destructor
我有
struct IMyInterface
{
virtual method1() = 0;
virtual method2() = 0;
};
Run Code Online (Sandbox Code Playgroud)
海湾合作委员会坚持认为我有
struct IMyInterface
{
virtual method1() = 0;
virtual method2() = 0;
virtual ~IMyInterface(){};
};
Run Code Online (Sandbox Code Playgroud)
我不明白为什么.纯接口就是接口(duh).析构函数是接口的具体实现者的内部实现细节的一部分; 它不构成界面的一部分.我理解整个切片问题(或者至少我认为我这样做)
所以我的问题是 - GCC是否有权坚持它,如果是这样,为什么呢?
Lou*_*nco 22
根据C++规范,是的.
您需要声明析构函数是虚拟的,否则,稍后
IMyInterface * ptr = getARealOne();
delete ptr;
Run Code Online (Sandbox Code Playgroud)
不会在派生类上调用析构函数(因为析构函数不在VTable中)
它必须是非纯的,因为基类析构函数总是由子类析构函数调用.
为了进一步解释,C++没有像Java或C#那样的接口概念.它只是一种只使用纯虚方法的约定,并将其视为一个接口.关于C++析构函数的其他规则使它需要是非纯的,这打破了与其他语言中的接口的相似性,但这些规则制定时这些语言并不存在.
| 归档时间: |
|
| 查看次数: |
5806 次 |
| 最近记录: |