![]() |
1
4
这是不确定的行为,所以任何事情都有可能发生。引用标准[expr.delete]:
尽管它的工作方式是实现的细节,但典型的实现可能会自动重写派生类中的析构函数,并在那里实现内存释放。请注意,您必须在基类中定义虚拟析构函数,以便实现可以在虚拟表中保留一个条目。 |
![]() |
2
3
从技术上讲,答案是“未知”。从没有虚拟析构函数的基指针中删除指向派生的指针是未定义的行为。 实际上,大多数实现都无法正确删除派生对象中的内容。 |
![]() |
3
3
从形式上讲,这是未定义的行为,因此您无法保证内存被释放,或者您的程序确实执行了任何特定的操作。它可能会格式化你的硬盘。可能不会。实际上,在这种情况下,内存很可能会被释放——但如果你依赖它,那你就是个傻瓜,你不应该这么做。就这么简单。 |
![]() |
4
0
编辑:我错了:标准草案中的关键散文,强调我的:第5.3.5节
|
![]() |
5
0
内存很有可能被正确释放。仅仅因为标准不能保证这并不意味着它不会起作用。很难想象它会失败。 |
![]() |
6
-4
在您描述的非常特殊的情况下,当您没有虚拟析构函数时,派生类对象使用的所有内存都将被释放。(如果使用非虚拟析构函数 总是 导致派生类泄漏内存,我认为该语言不允许从使用它们的类继承!) 记住,析构函数不是释放内存的工具;“delete”释放内存。析构函数只是一个被delete调用的函数。 布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 7 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 7 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 7 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 7 月前 |