为什么 c++ 中有虚拟析构函数而不是虚拟构造函数?
为什么我们可以有虚析构函数但不能有虚构造函数?
Why can we have a virtual destructor but not virtual constructor?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
为什么我们可以有虚析构函数但不能有虚构造函数?
Why can we have a virtual destructor but not virtual constructor?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
构造函数链可以在编译时确定,因为您始终从尽可能最具体的类中使用
new ClassName()
。但是,如果您使用多态性,您可能会在可能的父类上调用析构函数,因此您在编译时无法知道从哪里开始链。您需要一个虚拟函数来始终调用正确的函数(否则您最终会在最特定的类中得到可能未清理的资源)。
The constructor chain can be determined at compile time, because you use
new ClassName()
always from the most specific class possible.However you call destructors on possibly parent classes if you use polymorphism, so you can't know at compile time where to start the chain from. You need a virtual function to always call the right one (or you'd end up with potentially uncleaned resources in the most specific classes).