如何在C99中释放空指针,而在C ++ 98中则无法删除空指针。此外,为什么行为被归类为未定义?根据new的实现,信息与指针一起存储,因此解除分配器应该具有足够的信息来解除分配该块。来自C ++标准:
这意味着无法使用类型指针删除对象 void *因为没有void
类型的对象
我看到的唯一重要区别是,如果删除void指针,则不会运行析构函数;导致可能的内存泄漏。但肯定的是,这不应该保证不明确的行为,而是“注意”。标志。它是否与场景:(纯)虚拟析构函数类似于多态破坏。我的意思是,这两种方案都需要特定于实现的知识才能正确解除分配。
答案 0 :(得分:4)
“取决于新的实施” - 这是你的问题。您假设内存块具有与之关联的某种属性,但在C ++中不一定如此。指针的类型具有足够的信息(即类/结构的大小)以释放它而无需任何附加信息。正如你所说,有必要调用析构函数。