C++:栈分配对象是否需要虚析构函数?
关于当前C++程序是否需要虚析构函数的解答
结论:当前场景下不需要显式添加虚析构函数,具体原因如下:
- 你的代码中所有对象都是栈分配的,当对象离开作用域时,编译器会自动按正确顺序调用析构函数:栈上的
Rectangle对象会先调用自身默认生成的析构函数,再调用基类Shape2D的析构函数,不会出现析构不全或内存泄漏的问题。 - 虚析构函数的核心作用是解决通过基类指针
delete堆上分配的派生对象时的析构不全问题。你的代码既没有用new分配堆对象,也没有通过基类指针执行delete操作,完全触发不了需要虚析构的场景。
补充建议
如果后续你需要扩展代码,比如用基类指针管理堆上的派生对象,建议提前给基类Shape2D添加虚析构函数。因为基类已经包含虚函数(getArea),按照C++最佳实践,含有虚函数的类通常都应该声明虚析构函数,避免后续扩展时踩坑。
内容的提问来源于stack exchange,提问作者First User
相关产品推荐
相关产品推荐

