c++ - 删除静态转换指针是否安全?
问题描述
考虑抽象类AbstractMap
,它是子类MyMap
。执行以下删除操作是否安全?或者,我应该仅在重新投射到 MyMap 后删除 ptr 吗?为什么?MyMap
我想这是不安全的,因为在这种情况下,没有调用析构函数。
AbstractMap* ptr;
ptr = static_cast<AbstractMap*>(new MyMap());
delete ptr;
过去的问题谈到了强制转换void*
,但我不确定我的情况。
解决方案
假设AbstractMap
's (或它的基础,如果有的话)析构函数被标记为virtual
,delete ptr
将是明确定义的。
编译器将虚拟地调用派生最多的析构函数(与任何虚拟函数一样),而后者又会非虚拟地调用基类的析构函数。
析构函数将具有调用所有成员对象的析构函数的所有必要代码,并且在此过程结束时,内存将被回收回堆管理器(基于分配块的大小)。
推荐阅读
- android - Android MediaRecorder 在某些设备上不起作用
- c# - 使用组合框和文本框在模板列中向上/向下滚动时应用程序崩溃
- paho - 使用多个服务器 uri 自动重新连接
- akka - 如何创建对远程节点具有不可序列化依赖关系的 Actor?
- python - python - 如何从具有日期时间和文本值的字段中仅获取日期和文本值?
- rx-java2 - 无论错误如何,如何处理 RX Java 发出的所有事件?
- c# - JSONObject反序列化不反序列化
- python-3.x - 如何使用 boto3 找到我需要的 aws 命名空间
- python - 如何在seaborn中填充线图下的区域
- timezone - 为什么使用pytz时萨摩亚的偏移量不是+13或+14?