首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >强制使用虚拟析构函数?C++

强制使用虚拟析构函数?C++
EN

Stack Overflow用户
提问于 2010-09-13 20:44:38
回答 3查看 2.1K关注 0票数 16

我在C++常见问题解答中看不到答案:

我如何定义一个基类,这样继承它的每个类都需要定义一个析构函数?

我试着运行这个程序

代码语言:javascript
复制
struct VDtor { virtual ~VDtor()=0;  };
struct Test:VDtor { virtual ~Test(){}  };
int main() { delete new Test; return 0; }

出现错误的http://codepad.org/wFcE71w3

代码语言:javascript
复制
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()'

那么,这是可能的吗?

EN

回答 3

Stack Overflow用户

发布于 2010-09-13 21:05:52

不管怎样,每个类都有一个析构函数。在基中声明虚拟析构函数可确保子级具有虚拟析构函数。这并不意味着程序员需要显式声明析构函数--无论如何,这不是一件好事。这意味着,如果声明了析构函数,那么它将是虚拟的。

票数 1
EN

Stack Overflow用户

发布于 2010-09-13 22:40:30

代码语言:javascript
复制
struct VDtor { virtual ~VDtor()=0;  };
VDtor::~VDtor () { } // <== Implementation.
struct Test:VDtor { ~Test(){}  };
int main() { delete new Test; return 0; }

要修复这个错误,您必须像上面那样实际实现VDtor::~VDtor()。

票数 1
EN

Stack Overflow用户

发布于 2010-09-13 21:27:17

当Test被析构时,它将调用它的基类析构函数,而基类析构函数并不存在。如果你没有必要的销毁逻辑,你应该把它声明为空。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3700468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档