【问题标题】:pure virtual destructors in c++ Clion and VS2019 [duplicate]c ++ Clion和VS2019中的纯虚拟析构函数[重复]
【发布时间】:2020-01-25 13:49:59
【问题描述】:

我正在尝试声明纯虚拟析构函数, 在VS2019中我是这样写的:

    virtual ~A() = 0 {};

这很好,但在 Clion 中不接受 我收到以下消息:

函数定义上的纯说明符 virtual ~A() = 0{ };

它迫使我为该函数编写不同的实现(并不是说它很麻烦,但我想知道为什么会这样)

【问题讨论】:

  • 我刚要编辑 :D
  • 纯说明符和定义同时是无效的。填写错误报告可能是个好主意。
  • 在 VS2019 中我是这样写的:virtual ~A() = 0 {}; 很好这可能是 MS 的原生扩展(而不是我认识的第一个扩展)。跨度>
  • 在声明中virtual ~A() = 0;并在声明inline A::~A() = default;之后提供一个实现(因为是析构函数,还是需要提供)。如果实现在 .cpp 文件中,请省略 inline。如果析构函数需要做除default 以外的事情,请根据需要提供析构函数行为。

标签: c++ visual-c++ clion virtual-functions pure-virtual


【解决方案1】:

来自 C++ 20(11.6.3 抽象类)

  1. ...[注意:函数声明不能​​同时提供纯说明符和 定义 — 尾注] [示例:
struct C {
  virtual void f() = 0 { }; // ill-formed
};

——结束示例]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-14
    • 2019-12-08
    • 2010-10-12
    • 2017-01-27
    • 2011-03-03
    • 2017-08-13
    相关资源
    最近更新 更多