我尝试过的两个编译器都接受这种语法,但我在某处读到纯虚析构函数的定义应该总是放在类外面。 我的代码可以成功编译:
class AbstractBase
{
public:
virtual ~AbstractBase() = 0
{}
virtual void foo()
{
...
}
};
我尝试过的两个编译器都接受这种语法,但我在某处读到纯虚析构函数的定义应该总是放在类外面。 我的代码可以成功编译:
class AbstractBase
{
public:
virtual ~AbstractBase() = 0
{}
virtual void foo()
{
...
}
};
[Note: a function declaration cannot provide both a pure-specifier and a definition —end note] [Example:
struct C { virtual void f() = 0 { }; // ill-formed };
—end example]
= 0
和{ }
,因此您应该单独定义析构函数,就像在.cpp文件中一样。Microsoft Visual Studio接受这种语法,而且说实话,gcc编译器似乎也不会对此感到不满。 然而,你应该担心的不是编译器,而是链接器。 在类定义中(头文件中)定义纯虚析构函数会导致同一符号的多重定义。我不确定MSVC编译器如何处理这种情况,但是gcc可能会抱怨。此外,即使使用MSVC,当项目变得庞大并分成多个静态/动态库时,也可能会遇到麻烦。