在C ++ 11中,我们可以声明一个自动生成的析构函数:
struct X {
virtual ~X() = default;
};
另外,我们可以将析构函数声明为纯虚拟:
struct X {
virtual ~X() = 0;
};
我的问题是:如何声明析构函数两者自动生成和纯虚拟?看起来以下语法不正确:
struct X {
virtual ~X() = 0 = default;
};
这两个都不是:
struct X {
virtual ~X() = 0, default;
};
也不是这个:
struct X {
virtual ~X() = 0 default;
};
编辑:
对问题的目的作了一些澄清。基本上我希望 empty 类是不可实例化的基类,但派生类是可实例化的,那么该类必须具有纯虚拟析构函数。但另一方面,我不想在.cpp文件中提供定义。所以我需要一些等同于default
的机制。我想知道是否有人有想法解决问题。
答案 0 :(得分:46)
为了定义纯虚方法,需要从声明中单独定义。
因此:
struct X {
virtual ~X() = 0;
};
X::~X() = default;