我在C++常见问题解答中看不到答案:
我如何定义一个基类,这样继承它的每个类都需要定义一个析构函数?
我试着运行这个程序
struct VDtor { virtual ~VDtor()=0; };
struct Test:VDtor { virtual ~Test(){} };
int main() { delete new Test; return 0; }
出现错误的http://codepad.org/wFcE71w3
In function `Test::~Test()':
t.cpp:(.gnu.linkonce.t._ZN4TestD0Ev+0x1e): undefined reference to `VDtor::~VDtor()'
In function `Test::~Test()':
t.cpp:(.gnu.linkonce.t._ZN4TestD1Ev+0x1e): undefined reference to `VDtor::~VDtor()'
那么,这是可能的吗?
发布于 2010-09-13 21:05:52
不管怎样,每个类都有一个析构函数。在基中声明虚拟析构函数可确保子级具有虚拟析构函数。这并不意味着程序员需要显式声明析构函数--无论如何,这不是一件好事。这意味着,如果声明了析构函数,那么它将是虚拟的。
发布于 2010-09-13 22:40:30
struct VDtor { virtual ~VDtor()=0; };
VDtor::~VDtor () { } // <== Implementation.
struct Test:VDtor { ~Test(){} };
int main() { delete new Test; return 0; }
要修复这个错误,您必须像上面那样实际实现VDtor::~VDtor()。
发布于 2010-09-13 21:27:17
当Test被析构时,它将调用它的基类析构函数,而基类析构函数并不存在。如果你没有必要的销毁逻辑,你应该把它声明为空。
https://stackoverflow.com/questions/3700468
复制相似问题