use*_*091 9 c++ interface pure-virtual
C++编译器是否为这个"类"生成默认函数,如Constructor/Destructor/Copy-Constructor ...?
class IMyInterface
{
virtual void MyInterfaceFunction() = 0;
}
Run Code Online (Sandbox Code Playgroud)
我的意思是不可能实例化这个"类",所以我认为没有生成默认函数.否则,人们说你必须使用虚拟析构函数.这意味着如果我没有定义析构函数虚拟,它将是默认创建的,而不是虚拟的.
此外,我想知道为纯虚拟接口定义虚拟析构函数是否合理,如上所述?(所以这里没有使用指针或数据,所以不需要破坏任何东西)
谢谢.
是的。
没有任何措辞要求类可实例化才能隐式声明这些特殊成员函数。
这是有道理的 - 仅仅因为您无法实例化 Base,并不意味着 Derived 类不想使用这些函数。
struct Base
{
virtual void foo() = 0;
int x;
};
struct Derived : Base
{
Derived() {}; // needs access to Base's trivial implicit ctor
virtual void foo() {}
};
Run Code Online (Sandbox Code Playgroud)
看:
此外,我想知道为纯虚拟接口定义虚拟析构函数是否合理,就像上面的那样?(所以这里没有使用指针或数据,所以不需要破坏任何东西)
不仅合理,而且值得推荐。这是因为在虚函数层次结构的情况下,(自动)调用专用类的析构函数也会调用其基类的所有析构函数。如果未定义它们,您应该会收到链接错误。
如果您在类中至少定义了一个虚拟函数,那么您还应该定义一个虚拟析构函数。
析构函数可以这样定义=default:
这是一个更正的(可编译的)代码示例:
class ImyInterface
{
virtual void myInterfaceFunction() = 0;
virtual ~ImyInterface() = 0;
}
ImyInterface::~ImyInterface() = default;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4447 次 |
| 最近记录: |