C ++是否为纯虚拟类创建默认的“构造函数/析构函数/复制构造函数/复制赋值运算符”?

用户1911091

C ++编译器是否会为此“类”生成默认函数,例如Constructor / Destructor / Copy-Constructor ...?

class IMyInterface
{
    virtual void MyInterfaceFunction() = 0;
}

我的意思是不可能实例化此“类”,所以我认为没有默认函数生成。否则,人们会说您必须使用虚拟析构函数。这意味着如果我不定义虚拟的析构函数,它将默认创建,而不是虚拟的。

此外,我想知道为上述纯虚拟接口定义虚拟析构函数是否合理?(因此,此处未使用任何指针或数据,因此无需破坏任何内容)

谢谢。

乌他匹斯汀

此外,我想知道为上述纯虚拟接口定义虚拟析构函数是否合理?(因此,此处未使用任何指针或数据,因此无需破坏任何内容)

这不仅合理,而且值得推荐。这是因为在虚拟函数层次结构的情况下,(自动)调用专用类的析构函数还会调用其基类的所有析构函数。如果未定义它们,则应收到链接错误。

如果您在类中定义了至少一个虚拟函数,则还应该定义一个虚拟析构函数。

析构函数可以通过以下方式定义=default

这是一个更正(可编译)的代码示例:

class ImyInterface
{
    virtual void myInterfaceFunction() = 0;
    virtual ~ImyInterface() = 0;
}

ImyInterface::~ImyInterface() = default;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

复制构造函数,赋值运算符C ++

C ++复制/移动构造函数和赋值运算符

C ++:“ T a = b”-复制构造函数或赋值运算符?

删除默认C ++复制和移动构造函数和赋值运算符的缺点?

如何为包含 shared_ptr 的类创建复制构造函数/赋值运算符?C++

C ++向量复制构造函数和赋值运算符是否还会复制保留空间?

c ++复制构造函数和析构函数

C ++中的赋值运算符模板和复制构造函数

C++中的复制构造函数和赋值运算符

C ++-没有复制构造函数或赋值运算符的数组操作

C++ 类对象复制构造函数和运算符=

C++ 三元运算符调用复制构造函数而不是移动构造函数

依赖项没有复制构造函数或赋值运算符时的 C++ 初始化器列表

在 C++ 中使用带有字符串的复制构造函数和/或赋值运算符时堆栈溢出

即使类未定义构造函数,也无法在类上调用C ++默认移动赋值运算符

链表:如何实现析构函数、复制构造函数和复制赋值运算符?

在C ++中为链表创建复制构造函数/函数

C ++构造函数/析构函数

用基类的复制构造函数替换默认的复制构造函数(C ++)

在UML类图中为C ++类添加构造函数和析构函数

C ++复制构造函数和=运算符中的重载情况

复制构造函数和Assignemnt运算符重载在C ++中不起作用

C ++中的纯虚拟析构函数

没有默认构造函数的奇怪的C ++复制构造函数

C ++复制构造函数和默认构造函数

如果我还使用复制构造函数和重载=运算符,是否需要析构函数?

为什么在构造时调用C ++类的析构函数?

C ++构造函数和复制构造函数

模拟复制构造函数的C ++类