【问题标题】:Proper placement for the default pure virtual destructor in C++11C++11 中默认纯虚析构函数的正确放置
【发布时间】:2017-09-09 06:21:33
【问题描述】:

我有一个接口类,但我希望所有派生类都实现虚拟析构函数:

// Interface.h
class Interface {
    virtual ~Interface() = 0;
};

Interface::~Interface() = default;

问题是在这种情况下,由于重复的符号,我遇到了链接器错误。

我可以将定义放在.cpp 文件中,但我想知道是否有更优雅的解决方案?

【问题讨论】:

  • 可能是inline Interface::~Interface() = default;?
  • 函数(析构函数)不能是抽象的,同时有实现(默认)。
  • @AndrewKashpur,是的,它可以:stackoverflow.com/questions/37777606/…
  • 为什么要把析构函数设为纯虚函数?它没有添加任何东西。所有类都必须实现(或默认)析构函数。
  • @SanderDeDycker 当类没有任何成员函数来制作纯虚拟时,这是一个常用的技巧。

标签: c++ c++11 virtual-destructor


【解决方案1】:

您可以在之前添加内联。根据http://en.cppreference.com/w/cpp/language/destructor,这个语法是可以的:

decl-specifier-seq(optional) ~ class_name () = default;

decl-specifier-seq  -   friend, inline, virtual, or nothing (no return type) 

【讨论】:

    猜你喜欢
    • 2012-07-14
    • 2016-10-13
    • 1970-01-01
    • 2010-10-24
    • 2010-10-12
    • 2014-01-18
    • 1970-01-01
    相关资源
    最近更新 更多