【问题标题】:Default pure virtual destructor默认纯虚析构函数
【发布时间】:2012-07-14 17:12:40
【问题描述】:

在 C++11 中,我们可以声明一个自动生成的析构函数:

struct X {
  virtual ~X() = default;
};

另外,我们可以将析构函数声明为纯虚函数:

struct X {
  virtual ~X() = 0;
};

我的问题是:如何将析构函数声明为 both 自动生成的 和 纯虚拟的?看起来下面的语法不正确:

struct X {
  virtual ~X() = 0 = default;
};

这个也不是:

struct X {
  virtual ~X() = 0, default;
};

也不是这个:

struct X {
  virtual ~X() = 0 default;
};

编辑: 关于问题目的的一些澄清。基本上我希望 empty 类是不可实例化的基类,但派生类是可实例化的,那么该类必须具有纯虚拟析构函数。但另一方面,我不想在 .cpp 文件中提供定义。所以我需要某种等同于default 的机制。我想知道是否有人有解决问题的想法。

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

    为了定义一个纯虚方法,你需要一个独立于声明的定义。

    因此:

    struct X {
        virtual ~X() = 0;
    };
    
    X::~X() = default;
    

    【讨论】:

    • 这是一个成功编译的link to an Ideaone example。
    • 这个答案不正确!还是需要将X::~X() = default; 这行放到.cpp文件中,否则会出现multiple definition链接错误。
    • @icando 除非你写 inline; default 时没有暗示是吗?
    • @Dave:不是,但是类范围内定义的所有方法默认都是inline,所以很容易混淆。
    • 这是一个基于@nicol-bolas 代码的updated ideaone example。我也编辑了答案,但 StackOverflow 警告我 This edit will be visible only to you until it is peer reviewed。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 2021-12-09
    • 2014-01-30
    • 2010-10-24
    • 2017-04-21
    • 2016-03-26
    • 2010-10-12
    相关资源
    最近更新 更多