【发布时间】:2015-01-07 22:04:03
【问题描述】:
我可以在阅读C++ Primer 时看到这一点:
我们传递给deallocate的指针不能为null;它必须指向 由 allocate 分配的内存。
我查了deallocate的来源,发现了这个:
// __p is not permitted to be a null pointer.
void
deallocate(pointer __p, size_type)
{ ::operator delete(__p); }
好的,所以我知道delete 表达式和operator delete() 之间存在区别。 delete 表达式可用于空指针。但是,此函数直接调用全局operator delete() 函数。但是,我用谷歌搜索了这个问题,发现了一篇博文here,其中还指出全局运算符删除方法也检查空指针,如下所示:
void
operator delete (void* ptr) throw ()
{
if (ptr)
std::free (ptr);
}
另外,具有讽刺意味的是,我还发现 here 在空指针上调用 std::free 也没有效果......所以我的问题是,为什么不允许 __p 成为空指针?
【问题讨论】:
-
C++11 中有一些与在 NULL 指针上调用
delete有关的变化。请参阅my question 关于该主题。 -
不能要求释放器释放它自己没有分配的内存。在分配时从不返回 NULL 的自定义分配器应该能够假定它从未被要求释放 NULL。
标签: c++ pointers allocator delete-operator