为什么在 C99 中可以释放 void 指针,而在 C++98 中不能删除 void 指针。此外,如何将行为归类为未定义?根据 new 的实现,信息与指针一起存储,因此释放器应该有足够的信息来释放该块。从 C++ 标准:
这意味着不能使用 void * 类型的指针删除对象,因为没有 void 类型的对象
我看到的唯一重要区别是,如果您删除 void 指针,则不会运行析构函数;导致可能的内存泄漏。但这当然不应该保证未定义的行为,而是一个“注意”的标志。是不是类似于场景:(纯)用于多态破坏的虚拟析构函数。我的意思是,这两种情况都需要特定于实现的知识才能正确解除分配。