0

为什么在 C99 中可以释放 void 指针,而在 C++98 中不能删除 void 指针。此外,如何将行为归类为未定义?根据 new 的实现,信息与指针一起存储,因此释放器应该有足够的信息来释放该块。从 C++ 标准:

这意味着不能使用 void * 类型的指针删除对象,因为没有 void 类型的对象

我看到的唯一重要区别是,如果您删除 void 指针,则不会运行析构函数;导致可能的内存泄漏。但这当然不应该保证未定义的行为,而是一个“注意”的标志。是不是类似于场景:(纯)用于多态破坏的虚拟析构函数。我的意思是,这两种情况都需要特定于实现的知识才能正确解除分配。

4

1 回答 1

4

“取决于新的实施” - 这是你的问题。您假设内存块具有与之关联的某种属性,但在 C++ 中不一定是这种情况。指针的类型有足够的信息(即类/结构的大小)来释放它而无需任何附加信息。正如您所说,有必要调用析构函数。

于 2013-11-11T23:16:08.863 回答