可能重复:
C++类接口类的析构函数
考虑一个C++抽象类的简单示例,用于建模接口:
class IAnimal
{
virtual void walk()=0;
virtual ~IAnimal(){}
};
Run Code Online (Sandbox Code Playgroud)
是否更好地拥有析构函数?我不认为析构函数可以是纯虚拟的,至少我的测试会给出链接器错误,所以是否应该包含空的析构函数?
编辑:对不起,错字.它是一个析构函数而不是构造函数.
whe*_*ies 47
您应该始终使用带有接口的虚拟析构函数.例证:
IAnimal* animal = new Lion();
delete animal;
Run Code Online (Sandbox Code Playgroud)
现在它将使用什么析构函数?绝对不是Lion的析构函数,因为界面不知道Lion的析构函数.
所以,如果您的界面没有内存管理,请使用此选项:
virtual ~IAnimal(){}
Run Code Online (Sandbox Code Playgroud)
这取决于您是否打算使用指向接口类的指针以多态方式管理对象的生命周期.
如果这样做,那么析构函数必须是虚拟的,以便正确删除对象.删除没有虚拟析构函数的基类指针是无效的,并提供未定义的行为.
如果不这样做,那么您应该通过使析构函数非虚拟和受保护来强制执行此操作,因此只能删除派生类.
归档时间: |
|
查看次数: |
29749 次 |
最近记录: |