C++11 中默认纯虚拟析构函数的正确放置

Proper placement for the default pure virtual destructor in C++11

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

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

Interface::~Interface() = default;

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

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

您可以在之前添加内联。根据 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)